Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XSLT将XML转换为XML的问题_Xml_Xslt - Fatal编程技术网

使用XSLT将XML转换为XML的问题

使用XSLT将XML转换为XML的问题,xml,xslt,Xml,Xslt,我使用XSLT通过删除一些节点来实现XML到XML的转换。我是XSLt新手,它让人困惑 XML输入 <?xml version="1.0" encoding="UTF-8"?> <role> <status>success</status> <data> <name>ac1</name> </data> <dat

我使用XSLT通过删除一些节点来实现XML到XML的转换。我是XSLt新手,它让人困惑

XML输入

<?xml version="1.0" encoding="UTF-8"?>
    <role>
       <status>success</status>
       <data>
          <name>ac1</name>
       </data>
       <data>
          <name>ac2</name>
       </data>
       <data>
          <name>ac3</name>
       </data>
       <day>monday</day>
    </role>
XSLT是

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:output method="xml" encoding="utf-8" indent="yes" />
   <xsl:template match="role">
      <xsl:copy>
         <xsl:for-each select="data">
            <disaply_name>
               <xsl:value-of select="name" />
            </disaply_name>
         </xsl:for-each>
      </xsl:copy>
   </xsl:template>
</xsl:stylesheet>
产出是,

<?xml version="1.0" encoding="utf-8"?>
<role>
  <disaply_name>ac1</disaply_name>
  <disaply_name>ac2</disaply_name>
  <disaply_name>ac3</disaply_name>
</role>
<?xml version="1.0" encoding="utf-8"?>
<root>
<role2>
  <disaply_name>ac1</disaply_name>
</role2>
<role2>
  <disaply_name>ac2</disaply_name>
</role2>
<role2>
  <disaply_name>ac3</disaply_name>
</role2>
</root>
预计产量为

<?xml version="1.0" encoding="utf-8"?>
<role>
  <disaply_name>ac1</disaply_name>
  <disaply_name>ac2</disaply_name>
  <disaply_name>ac3</disaply_name>
</role>
<?xml version="1.0" encoding="utf-8"?>
<root>
<role2>
  <disaply_name>ac1</disaply_name>
</role2>
<role2>
  <disaply_name>ac2</disaply_name>
</role2>
<role2>
  <disaply_name>ac3</disaply_name>
</role2>
</root>
我应该修改什么

使用表示它正在复制当前节点,在本例中,这解释了它在输出中的外观。由于之前没有指定其他节点,XSLT将其视为根节点。因此,我只是删除了它,并正确地放置了节点和

要获得预期的输出,请尝试使用以下命令:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" encoding="utf-8" indent="yes" />
    <xsl:template match="role">
        <root>
            <xsl:for-each select="data">
                <role2>
                    <display_name>
                        <xsl:value-of select="name" />
                    </display_name>
                </role2>
            </xsl:for-each>
        </root>
    </xsl:template>
</xsl:stylesheet>
以下是我得到的输出:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <role2>
    <display_name>ac1</display_name>
  </role2>
  <role2>
    <display_name>ac2</display_name>
  </role2>
  <role2>
    <display_name>ac3</display_name>
  </role2>
</root>

您应该修改预期的输出。您不应该有多个标记,因为它是根节点。您的预期输出不是有效的XML。我已更改了预期输出。。