我是XSL/XML的新手,我需要幫助進行XSL轉換。如何使用XSLT複製根節點的命名空間和屬性?
我有XML這將啓動這樣
<?xml version="1.0" encoding="UTF-8"?>
<Invoice
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 ../ws/Invoice.xsd"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
xmlns:sac="urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2"
xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
xmlns:sig="urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2">
<ext:UBLExtensions>
<ext:UBLExtension>
<cbc:ID>INVOICE1</cbc:ID>
<cbc:Name>InvoiceIssuePlaceData</cbc:Name>
<ext:ExtensionAgencyURI>urn:invoice:hr:issueplace</ext:ExtensionAgencyURI>
<ext:ExtensionContent>
<ext:InvoiceIssuePlace>London</ext:InvoiceIssuePlace>
</ext:ExtensionContent>
</ext:UBLExtension>
</ext:UBLExtensions>
<cbc:UBLVersionID>2.1</cbc:UBLVersionID>
<cbc:ID>01 1206-2406-568</cbc:ID>
</Invoice>
我想創建一個所有屬性的元素,並創造具有屬性節點的值標籤<之間要素_>。
這裏是xsl ...
<?xml version='1.0' encoding='utf-8' ?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
xmlns:sig="urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2"
xmlns:sac="urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 ../ws/Invoice.xsd"
version="1.0">
<xsl:output method="xml"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="@*|*|text()">
<xsl:copy>
<xsl:apply-templates select="@*|*|text()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[@*]">
<xsl:element name="{name()}">
<xsl:if test="count(@*)>=count(node())">
<_>
<xsl:value-of select="."/>
</_>
</xsl:if>
<xsl:for-each select="@*">
<xsl:element name="{name()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
<xsl:if test="count(node())>count(@*)">
<xsl:apply-templates select="*|text()"/>
</xsl:if>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
的問題是,這種轉變不轉變根節點(發票),因爲我需要。我得到:
<?xml version="1.0"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
<xsi:schemaLocation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 ../ws/Invoice.xsd</xsi:schemaLocation>
發票中沒有其他屬性和新元素。只有xsi:schemaLocation,但在該節點的級別上定義了名稱空間。
我在做什麼錯了?
謝謝。
*我想創建一個所有屬性的元素,並創造元素在'<_>'標籤之間爲具有屬性*的節點的值。我不明白。你指的是什麼屬性? – mzjn 2012-07-27 22:18:29
源xml中的所有屬性都應該轉換爲子元素,除了根節點,它應該保留名稱空間屬性併爲每個屬性創建子元素。 – 2012-07-28 00:35:53
您的XML包含名稱空間聲明,但沒有屬性。請告訴我們期望的輸出是什麼樣子。 – mzjn 2012-07-28 07:24:23