0

我正在学习 XSLT。我正在尝试按照@Rich 的这篇文章如何在 Xslt 中用另一个节点名替换节点名的建议将节点转换为节点?

这是我的输入 XML:

<ns:positionSkillResponse xmlns:ns="http://positionskillmanagementservice.webservices.com">
<ns:return>1</ns:return>
<ns:return>9</ns:return>
</ns:positionSkillResponse>

我正在尝试使用下面的代码对其进行转换,这会导致解析器错误。我认为 ns:return 是问题所在,因为转换器代码不知道如何解析命名空间 ns。但是命名空间没有发布到 URL,所以我不能把它指向那里。那是问题吗?我该怎么办?

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:
  version="1.0">

  <xsl:output method="xml" />

<xsl:template match="ns:return">
    <parameter>
        <xsl:apply-templates select="@*|node()"/>
    </parameter>
</xsl:template>

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

结果:

Error:XSLTProcessor::transformToXml() [<a href='xsltprocessor.transformtoxml'>xsltprocessor.transformtoxml</a>]: No stylesheet associated to this object

通过此工具进行测试:

4

1 回答 1

1

您的 XSL 无效(它有一个未完成的命名空间声明并且缺少一个结束xsl:stylesheet标记),但即使修复了这个问题,该工具似乎也不起作用。试试这个:

http://www.xslfiddle.net/

当此 XSLT 用于该工具并带有您给定的输入时:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns="http://positionskillmanagementservice.webservices.com"
  version="1.0">

  <xsl:output method="xml" />

  <xsl:template match="ns:return">
    <parameter>
      <xsl:apply-templates select="@*|node()"/>
    </parameter>
  </xsl:template>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

产生的结果是:

<?xml version="1.0"?><ns:positionSkillResponse xmlns:ns="http://positionskillmanagementservice.webservices.com"><parameter>1</parameter><parameter>9</parameter></ns:positionSkillResponse>
于 2013-04-22T22:41:22.503 回答