使用XSLT的XML映射
我想将输入xml文件更改为给定格式 我的输入xml是:使用XSLT的XML映射,xml,xslt,Xml,Xslt,我想将输入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>
<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>
真的
O
假的
1.
并且,提取的xml的标记名应该如下所示进行更改
->
->
->
->
<Updatedaaa>
<UpdateItem>
<UpdatedStatus>true</UpdatedStatus>
<Updatedzzzz>0</Updatedzzzz>
</UpdateItem>
<UpdateItem>
<UpdatedStatus>false</UpdatedStatus>
<Updatedzzzz>1</Updatedzzzz>
</UpdateItem>
</Updatedaaa>
真的
0
假的
1.
我尝试使用下面的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文件。请帮我找出问题所在
谢谢,在输入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>
当将此XSLT应用于输入XML共享时,将生成所需的输出
<?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>
真的
O
假的
1.
是的,您可以这样做,您使用任何开发人员工具吗?不,我只是试用在线工具。我试着用另外一些问题来解决这个问题。就像您的问题一样,它不包含任何XSLT代码。请尝试并描述您的困境。使用XSLT代码更新了问题。从这里开始,然后解决其他问题: