我正在从源XML文件中提取XML文件的一部分。我是XSLT部分的新手,但是我试图编写XSLT,但是在获取正确的数据方面没有任何好运。
例如,我有像
这样的XML> <?xml version="1.0" encoding="utf-8"?>
<Response xmlns="https://insuredapp.com/rating/" id="24d846677aefd1bd7fdf52286e692a22">
<Result type="request">
<abc>
<bcd>
</bcd>
</abc>
</Result>
<Result type="response">
<InsuranceSvcRs>
<PersPkgPolicyQuoteInqRs>
<PersPolicy>
<Coverage>
<!--- Some MOre Elemetns -->
</Coverage>
<Coverage>
<!--- Some MOre Elemetns -->
</Coverage>
<Coverage>
<!--- Some MOre Elemetns -->
</Coverage>
</PersPolicy>
</PersPkgPolicyQuoteInqRs>
</InsuranceSvcRs>
</Result>
</Response>
应用XSLT转换后,我希望输出为
> <?xml version="1.0" encoding="utf-8"?>
<Coverages>
<Coverage>
<!--- Some More Elements -->
</Coverage>
<Coverage>
<!--- Some More Elements -->
</Coverage>
<Coverage>
<!--- Some More Elements -->
</Coverage>
</Coverages>
为了使用XSLT提取上述覆盖范围,我编写了以下XSLT代码
> <?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/Response/Result[@type='response']/InsuranceSvcRs/PersPkgPolicyQuoteInqRs/PersPolicy">
<!--<xsl:for-each select="/Response/Result[@type='response']/InsuranceSvcRs/PersPkgPolicyQuoteInqRs/PersPolicy/Coverage">
<xsl:value-of select="CoverageCd"/>
</xsl:for-each>-->
<xsl:copy>
<xsl:apply-templates select="/Response/Result[@type='response']/InsuranceSvcRs/PersPkgPolicyQuoteInqRs/PersPolicy"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
但我没有得到理想的输出,请仔细研究。
答案 0 :(得分:1)
首先,输入文档中有一个默认命名空间:
<Response xmlns="https://insuredapp.com/rating/">
如果您想从此输入中选择单个元素,则必须在XSLT样式表中重新声明此命名空间:
<xsl:stylesheet xmlns:resp="https://insuredapp.com/rating/">
从匹配/
(文档节点)的模板开始,输出Coverages
并使用xsl:copy-of
指令。
XSLT样式表
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:resp="https://insuredapp.com/rating/"
exclude-result-prefixes="resp">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<Coverages xmlns="https://insuredapp.com/rating/">
<xsl:copy-of select="//resp:Coverage"/>
</Coverages>
</xsl:template>
</xsl:stylesheet>
XML输出
<?xml version="1.0" encoding="UTF-8"?>
<Coverages xmlns="https://insuredapp.com/rating/">
<Coverage>
<!--- Some MOre Elemetns -->
</Coverage>
<Coverage>
<!--- Some MOre Elemetns -->
</Coverage>
<Coverage>
<!--- Some MOre Elemetns -->
</Coverage>
</Coverages>
请注意,输出中的元素仍在命名空间中。目前尚不清楚你是否想要摆脱那个命名空间。