使用XSLT的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>

我想将输入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>

真的
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代码更新了问题。从这里开始,然后解决其他问题: