2

我需要使用 xslt 将一种 xml 格式转换为另一种 xml。最初我尝试不使用命名空间并得到它。但是当我尝试使用命名空间 xmlns="http://ws.wso2.org/dataservice" 时,它在给定的 xml 文件中没有前缀作为 xmlns:d="http://ws.wso2.org/dataservice" 无法工作

<test xmlns="http://ws.wso2.org/dataservice">
 <datarows>
  <name>Name</name>
 </datarows>
 <datarows>
  <name>karthik</name>
 </datarows>
 </testcsv>

我需要 xsl 转换后的 xml 文件,就像

<head>
<names>Name</names>
<names>karthik</names>
</head>

帮助我使用 xslt

我试过 xslt 作为

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:d="http://ws.wso2.org/dataservice" exclude-result-prefixes="d" >
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
     <namespace-alias stylesheet-prefix="xsl" result-prefix="#default"/>


    <xsl:template match="/">
    <head>
        <xsl:for-each select="testcsv/datarows">
            <names>
                <xsl:value-of select="name" />
            </names>
        </xsl:for-each>
        </head>
    </xsl:template>
</xsl:stylesheet>
4

2 回答 2

2

请更改以下列表: 1. 您的输入 XML 格式不正确。请将根元素更改为<testcsv> 2。<namespace-alias stylesheet-prefix="xsl" result-prefix="#default"/>从您的 XSLT 中删除,因为它不需要。3. 在您的输入 XML 中添加命名空间 xmlns:d="http://ws.wso2.org/dataservice"

输入 XML:

<?xml version="1.0"?>
<testcsv xmlns:d="http://ws.wso2.org/dataservice">
 <datarows>
  <name>Name</name>
 </datarows>
 <datarows>
  <name>karthik</name>
 </datarows>
 </testcsv>

XSLT 转换:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:d="http://ws.wso2.org/dataservice" exclude-result-prefixes="d" >
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

    <xsl:template match="/">
    <head>
        <xsl:for-each select="testcsv/datarows">
            <names>
                <xsl:value-of select="name" />
            </names>
        </xsl:for-each>
        </head>
    </xsl:template>
</xsl:stylesheet>

输出:

<head>
  <names>Name</names>
  <names>karthik</names>
</head>
于 2013-04-18T05:51:26.927 回答
1

据我了解,您将(或不能)更改您的 xml 中的 xmlns 声明(可能是因为它是在其他地方生成的)。比你必须在你的 xlst 中使用 xml 节点前缀。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:d="http://ws.wso2.org/dataservice"
    exclude-result-prefixes="d"
    >
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    <xsl:template match="/">
        <head>
            <xsl:for-each select="d:testcsv/d:datarows" >
                <names>
                    <xsl:value-of select="d:name" />
                </names>
            </xsl:for-each>
        </head>
    </xsl:template>
</xsl:stylesheet>
于 2013-04-18T08:59:57.097 回答