我正在尝试使用xslt将xml从一个xml转换为另一个xml,但无法获得错误。
我的意见是:
<?xml version = "1.0"?>
<queryResponse xmlns="urn:sfobject.sfapi.successfactors.com" xmlns:ns2="urn:fault.sfapi.successfactors.com">
<result>
<sfobject>
<id>1791
</id>
<type>CompoundEmployee
</type>
<execution_timestamp>2016-11-08T06:38:48.000Z
</execution_timestamp>
<version_id>1611P0
</version_id>
</sfobject>
<sfobject>
<id>122
</id>
<type>Simple
</type>
<execution_timestamp>2016-11-08T08:32:18.000Z
</execution_timestamp>
<version_id>16120
</version_id>
</sfobject>
<numResults>1
</numResults>
<hasMore>true
</hasMore>
<querySessionId>5f619648-548a-43ec-8119-627094f927a5
</querySessionId>
</result>
</queryResponse>
并且XSLT是:
<?xml version = "1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="result">
<calls>
<xsl:for-each select = "sfobject">
<call>
<id>
<xsl:value-of select = "id"/>
</id>
<type>
<xsl:value-of select = "type"/>
</type>
</call>
</xsl:for-each>
</calls>
</xsl:template>
</xsl:stylesheet>
我收到的输出如下:
1791 CompoundEmployee 2016-11-08T06:38:48.000Z 1611P0 122简单
2016-11-08T08:32:18.000Z 16120 1真实 5f619648-548a-43ec-8119-627094f927a5
基本上,我没有获得标签。我打算得到如下输出:
<calls>
<call>
<id>123</id>
<type>CompoundEmployee</type>
</call>
</calls>
答案 0 :(得分:0)
您需要在xslt文件中提供命名空间并使用命名空间前缀
访问您的元素你的xslt文件应该是
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sf="urn:sfobject.sfapi.successfactors.com"
xmlns:sin="urn:fault.sfapi.successfactors.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0"
exclude-result-prefixes="sf sin xs">
<xsl:output indent="yes" method="xml" />
<xsl:template match="/sf:queryResponse">
<calls>
<xsl:for-each select="sf:result/sf:sfobject">
<call>
<id>
<xsl:value-of select="sf:id" />
</id>
<type>
<xsl:value-of select="sf:type" />
</type>
</call>
</xsl:for-each>
</calls>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:-1)
在XML的第一行
<queryResponse xmlns="urn:sfobject.sfapi.successfactors.com" xmlns:ns2="urn:fault.sfapi.successfactors.com">
将XML默认命名空间设置为
的xmlns =&#34;瓮:sfobject.sfapi.successfactors.com&#34;
导致<result>
节点真正被视为
<urn:sfobject.sfapi.successfactors.com:result>
节点。所以XSLT中的以下行
<xsl:template match="result">
尝试匹配<result>
个节点,但只找到
<urn:sfobject.sfapi.successfactors.com:result>
XML文件中的节点。因此&#34;不匹配&#34;文字输出。
删除
的xmlns =&#34;瓮:sfobject.sfapi.successfactors.com&#34;
从XML文件的第一行解决问题。