我有一种情况,我想从输入XML中的XML标记复制包括名称空间在内的所有属性[这里是指整个属性列表和名称空间列表,而不仅仅是属性的值]。
例如:
输入XML:
<?xml version="1.0" encoding="UTF-8"?>
<enricher>
<result>
<xbrl xmlns="http://www.xbrl.org/2003/instance"
xmlns:idp-com="http://www.dnb.com/IDP/Common/Vers1"
xmlns:idp-enumcom="http://www.dnb.com/IDP/Common/Enumeration/Common/Vers1"
xsi:schemaLocation="http://www.dnb.com/IDP/Product/Common/Vers1 ../Common/ProductCommonTaxonomy.xsd
http://www.dnb.com/IDP/Common/Vers1 ../../Data/Common/CommonTaxonomy.xsd">
<context id="defaultI">
<entity>
<identifier scheme="http://www.dnb.com">Text</identifier>
</entity>
<period>
<instant>2000-07-14</instant>
</period>
</context>
</xbrl>
</result>
</enricher>
输出XML:
<?xml version="1.0" encoding="UTF-8"?>
<enricher>
<result>
<xbrlresp xmlns="http://www.xbrl.org/2003/instance"
xmlns:idp-com="http://www.dnb.com/IDP/Common/Vers1"
xmlns:idp-enumcom="http://www.dnb.com/IDP/Common/Enumeration/Common/Vers1"
xsi:schemaLocation="http://www.dnb.com/IDP/Product/Common/Vers1 ../Common/ProductCommonTaxonomy.xsd
http://www.dnb.com/IDP/Common/Vers1 ../../Data/Common/CommonTaxonomy.xsd">
<context id="defaultI">
<entity>
<identifier scheme="http://www.dnb.com">Text</identifier>
</entity>
<period>
<instant>2000-07-14</instant>
</period>
</context>
</xbrlresp>
</result>
</enricher>
输出应具有的<xbrlresp>
标签,其中包含的所有名称空间和属性<xbrl>
。
编辑:在您揭示了实际的问题之后,我也更改了样式表。同样,您的输入不是格式正确的XML,因为未定义名称空间:
`xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
XML输入
<enricher>
<result>
<xbrl xmlns="http://www.xbrl.org/2003/instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:idp-com="http://www.dnb.com/IDP/Common/Vers1"
xmlns:idp-enumcom="http://www.dnb.com/IDP/Common/Enumeration/Common/Vers1"
xsi:schemaLocation="http://www.dnb.com/IDP/Product/Common/Vers1 ../Common/ProductCommonTaxonomy.xsd
http://www.dnb.com/IDP/Common/Vers1 ../../Data/Common/CommonTaxonomy.xsd">
<context id="defaultI">
<entity>
<identifier scheme="http://www.dnb.com">Text</identifier>
</entity>
<period>
<instant>2000-07-14</instant>
</period>
</context>
</xbrl>
</result>
</enricher>
XSLT样式表
样式表是一个简单的身份转换,但有一个例外,即用xbrl
新元素替换元素。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:xb="http://www.xbrl.org/2003/instance">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:template match="xb:xbrl">
<xsl:element name="xbrlresp" namespace="http://www.xbrl.org/2003/instance">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:transform>
XML输出
<?xml version="1.0" encoding="UTF-8"?>
<enricher>
<result>
<xbrlresp xmlns="http://www.xbrl.org/2003/instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.dnb.com/IDP/Product/Common/Vers1 ../Common/ProductCommonTaxonomy.xsd http://www.dnb.com/IDP/Common/Vers1 ../../Data/Common/CommonTaxonomy.xsd">
<context xmlns="http://www.xbrl.org/2003/instance" xmlns:idp-com="http://www.dnb.com/IDP/Common/Vers1" xmlns:idp-enumcom="http://www.dnb.com/IDP/Common/Enumeration/Common/Vers1" id="defaultI">
<entity>
<identifier scheme="http://www.dnb.com">Text</identifier>
</entity>
<period>
<instant>2000-07-14</instant>
</period>
</context>
</xbrlresp>
</result>
</enricher>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句