2
嗯,我有這個XML添加節點XML不復制的xmlns = 「」 屬性
XML
<?xml version="1.0" encoding="UTF-8"?>
<!-- Built using IBM Image Construction and Composition Tool, version: 1.2.0.1-20121129-1310-255 on: Oct 18, 2013 12:14:22 -->
<Envelope
xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1"
xmlns:cloudburst="http://www.ibm.com/websphere/rainmaker/2009/3" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData"
xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" cloudburst:name="POSTGRES-9.2.4-RHEL-64.X64.ATF.PRB"
cloudburst:version="1.0.0" cloudburst:build="sample" cloudburst:serviceLevel="0"
cloudburst:description="BASEIMAGE FOR POSTGRESQL 9.2.4" cloudburst:symbolicName="POSTGRES-9.2.4-RHEL-64.X64.ATF.PRB">
(...)
<VirtualSystem ovf:id="POSTGRES-9.2.4-RHEL-64.X64.ATF.PRB.BASE">
<Name>BASEIMAGE FOR POSTGRESQL 9.2.4</Name>
<VirtualHardwareSection ovf:transport="iso">
(...)
<Item>
<rasd:Caption>2 virtual CPUs</rasd:Caption>
<rasd:Description>Number of virtual CPUs</rasd:Description>
<rasd:ElementName>2 virtual CPUs</rasd:ElementName>
<rasd:InstanceID>1</rasd:InstanceID>
<rasd:ResourceType>3</rasd:ResourceType>
<rasd:VirtualQuantity>2</rasd:VirtualQuantity>
</Item>
<Item>
<rasd:Caption>SCSI Controller 0</rasd:Caption>
<rasd:ElementName>SCSI Controller 0</rasd:ElementName>
<rasd:InstanceID>8</rasd:InstanceID>
<rasd:ResourceSubType>lsilogic</rasd:ResourceSubType>
<rasd:ResourceType>6</rasd:ResourceType>
</Item>
,我想通過編輯一些Item
標籤和屬性進行修改(已在XSL belo中沒有顯示),並且主要在VirtualHardwareSection
的末端添加新的File
節點
XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData"
xpath-default-namespace="http://schemas.dmtf.org/ovf/envelope/1"
exclude-result-prefixes="ns" > <!-- Para que no copie el ns: y su URI en NetworkSection -->
<xsl:output method="xml" indent="yes"/>
<!--<xsl:preserve-space elements="*"/>-->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<!-- Añadimos un nodo a VirtualHardwareSection -->
<xsl:template match="Envelope/VirtualSystem/VirtualHardwareSection">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/> <!-- Copiamos lo que ya está incluido en el nodo -->
<!-- *** Lo copia pero añade un atributo vacio: xmlns="" -->
<Item> <!-- v Añadimos las siguientes líneas: v -->
<rasd:AddressOnParent>0</rasd:AddressOnParent>
<rasd:AutomaticAllocation>true</rasd:AutomaticAllocation>
<rasd:Caption>Ethernet adapter on "Network 2"</rasd:Caption>
<rasd:Connection>Network 2</rasd:Connection>
<rasd:ElementName>eth1</rasd:ElementName>
<rasd:InstanceID>13</rasd:InstanceID>
<rasd:ResourceSubType>VMXNET3</rasd:ResourceSubType>
<rasd:ResourceType>10</rasd:ResourceType>
</Item> <!--^Añadimos las siguientes líneas:^ -->
</xsl:copy> <!-- lo unico que lo coloca al final del nodo VirtualHardwareSection, estaria bien que pudiera ponerse despues del nodo con igual ResourceType -->
</xsl:template>
然而,當我使用變換Altova的XMLSpy的2013年XML,我結束了這一點:
<Item>
<rasd:AddressOnParent xmlns="">0</rasd:AddressOnParent>
<rasd:AutomaticAllocation xmlns="">true</rasd:AutomaticAllocation>
<rasd:Caption xmlns="">Ethernet adapter on "Network 2"</rasd:Caption>
<rasd:Connection xmlns="">Network 2</rasd:Connection>
<rasd:ElementName xmlns="">eth1</rasd:ElementName>
<rasd:InstanceID xmlns="">13</rasd:InstanceID>
<rasd:ResourceSubType xmlns="">VMXNET3</rasd:ResourceSubType>
<rasd:ResourceType xmlns="">10</rasd:ResourceType>
</Item>
我不想xmlns=""
部分在那裏,只是複製像那些已經存在的節點。我能做什麼?
感謝
值得指出的是,無論是否存在多餘的xmlns =「」聲明,XDM結果樹都是完全相同的。唯一的區別在於序列化,並且重新分析都會給出相同的XDM樹。我不確定沒有詳細檢查序列化規範是否允許冗餘聲明,但事實是它唯一的問題是整型。 –
嗨,抱歉這麼久纔回復。謝謝你的回答,不幸的是我不能使用其他程序,因爲我沒有足夠的權限來安裝任何東西。但是,這些額外的屬性似乎不會影響我的文件,因爲它們沒有被使用,所以我可以放心地忽略它們。我希望其他人看到這個答案並嘗試一下,看看在他們的情況下是否有助於將答案標記爲已接受。 – fernandopcg
@fernandopcg夠公平的。順便說一句,將'xmlns =「...」'指定爲「屬性」是錯誤的 - 這是一個名稱空間聲明,您不能將其視爲XSLT中的屬性(或任何其他支持名稱空間的XML處理工具)。 –