【发布时间】:2014-07-01 18:44:23
【问题描述】:
我尝试将以下 XML 转换为内部规范格式。我需要做的是在assignedAuthor 部分中测试特定根字符串的“id”节点,并据此获取扩展属性。我必须使用 XSLT 1.0,因为我使用 BizTalk 映射器来运行这个 XSLT。
这是 XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ClinicalDocument xmlns="urn:hl7-org:v3">
<component>
<structuredBody>
<component>
<section>
<entry>
<act>
<author>
<assignedAuthor>
<id root="1.2.840.113619.21.1.4780296594025264329.2.2" extension="1609858104000010"/>
<id root="2.16.840.1.113883.4.6" extension="1437282605"/>
</assignedAuthor>
</author>
</act>
</entry>
</section>
</component>
</structuredBody>
</component>
</ClinicalDocument>
这是我希望它看起来转换的方式(NPI 只是根属性等于“2.16.840.1.113883.4.6”的 id 节点的扩展属性):
<ns13:Insert>
<ns13:Rows>
<ns13:NPI>1437282605</NPI>
</ns13:Rows>
</ns13:Insert>
当我使用这个 XSLT(没有总体模板等)时:
<ns13:Insert>
<ns13:Rows>
<xsl:for-each select="*/*[local-name()='author']/*[local-name()='assignedAuthor']/*[local-name()='id']">
<xsl:if test="../*[local-name()='id']/@root">
<ns13:NPI>
<xsl:value-of select="./@extension" />
</ns13:NPI>
</xsl:if>
</xsl:for-each>
</ns13:Rows>
</ns13:Insert>
我得到这个结果(这是预期的,因为我没有测试特定的根属性字符串):
<ns13:Insert>
<ns13:Rows>
<ns13:NPI>1609858104000010</ns13:NPI>
<ns13:NPI>1437282605</ns13:NPI>
</ns13:Rows>
</ns13:Insert>
但是当我尝试在 XSLT 中使用这个 if 语句时:
<ns13:Insert>
<ns13:Rows>
<xsl:for-each select="*/*[local-name()='author']/*[local-name()='assignedAuthor']/*[local-name()='id']">
<xsl:if test="string(../*[local-name()='id']/@root)='2.16.840.1.113883.4.6'">
<ns13:NPI>
<xsl:value-of select="./@extension" />
</ns13:NPI>
</xsl:if>
</xsl:for-each>
</ns13:Rows>
</ns13:Insert>
我得到以下结果(NPI 没有显示,因为由于某种原因 if 语句没有评估为真,我无法弄清楚我做错了什么):
<ns13:Insert>
<ns13:Rows>
</ns13:Rows>
</ns13:Insert>
XML 实际上比这复杂得多,这里有太多要链接的内容,但这是这个特定组件部分的格式(减去与此问题无关的数据)。 XSLT 也复杂得多,但这只是我遇到的一个问题。任何帮助将不胜感激。
【问题讨论】:
标签: xml xslt biztalk biztalk-2010