我想将输入xml文件更改为给定格式。
我输入的xml是:
<Syncaaa xmlns="http://www.w3.org/TR/html4/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/TR/html4/ Syncaaa.xsd" releaseID="9.2" versionID="2.0.1">
<eee>
<Sender>
<BOD>qwqqs</BOD>
<ID>1222</ID>
<Code>Success</Code>
</Sender>
</eee>
<ddd>
<bbb>
<EntityId>100</EntityId>
</bbb>
<aaa type="xoxo">
<Item>
<Status>true</Status>
<zzzz>O</zzzz>
</Item>
<Item>
<Status>false</Status>
<zzzz>1</zzzz>
</Item>
</aaa>
</ddd>
</Syncaaa>
从xml以上,我想在xml部分下面提取。
<aaa type="xoxo">
<Item>
<Status>true</Status>
<zzzz>O</zzzz>
</Item>
<Item>
<Status>false</Status>
<zzzz>1</zzzz>
</Item>
</aaa>
并且,提取的xml的标签名称应该如下更改。
<ddd>
- &gt; <Updatedaaa>
<Item>
- &gt; <UpdateItem>
<Status>
- &gt; <UpdatedStatus>
<zzzz>
- &gt; <Updatedzzzz>
例外情况如下所示。
<Updatedaaa>
<UpdateItem>
<UpdatedStatus>true</UpdatedStatus>
<Updatedzzzz>0</Updatedzzzz>
</UpdateItem>
<UpdateItem>
<UpdatedStatus>false</UpdatedStatus>
<Updatedzzzz>1</Updatedzzzz>
</UpdateItem>
</Updatedaaa>
我尝试使用以下xsl文件执行该任务。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ddd">
<UpdatedItem>
<xsl:apply-templates select="@*"/>
<UpdatedStatus>
<xsl:apply-templates select="Status"/>
</UpdatedStatus>
<Updatedzzzz>
<xsl:apply-templates select="zzzz"/>
</Updatedzzzz>
</UpdatedItem>
</xsl:template>
</xsl:stylesheet>
但它没有使用这个xsl文件。请帮我确定一下这个问题。
谢谢,
答案 0 :(得分:2)
在输入XML xmlns="http://www.w3.org/TR/html4/"
中关联的命名空间在XSL中缺失。需要在XSL中添加以下内容才能使用命名空间。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:html="http://www.w3.org/TR/html4/"
exclude-result-prefixes="html">
然后可以通过将名称空间前缀添加到XML节点来访问XML数据。可以有多种解决方案来获得所需的输出,如下所示。
<强> XSL 强>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:html="http://www.w3.org/TR/html4/"
exclude-result-prefixes="html">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<Updatedaaa>
<xsl:for-each select="//*/html:Item">
<UpdatedItem>
<UpdatedStatus>
<xsl:value-of select="html:Status" />
</UpdatedStatus>
<Updatedzzzz>
<xsl:value-of select="html:zzzz" />
</Updatedzzzz>
</UpdatedItem>
</xsl:for-each>
</Updatedaaa>
</xsl:template>
</xsl:stylesheet>
当应用于输入XML共享时,此XSLT会生成所需的输出
<?xml version="1.0" encoding="UTF-8"?>
<Updatedaaa>
<UpdatedItem>
<UpdatedStatus>true</UpdatedStatus>
<Updatedzzzz>O</Updatedzzzz>
</UpdatedItem>
<UpdatedItem>
<UpdatedStatus>false</UpdatedStatus>
<Updatedzzzz>1</Updatedzzzz>
</UpdatedItem>
</Updatedaaa>