我有一个需要过滤出 XML 中的特定数据的 XSL。
在我的 XML 中的某个地方会有一个节点,例如:
<id root="2.16.840.1.113883.3.51.1.1.6.1" extension="9494949494949" />
我在下面的 XSL 删除了扩展节点并向节点添加了nullFlavor="MSK"。
我现在需要做的是从扩展节点获取值,并在整个 XML 文档中搜索该值,并将其替换为* *。
但我不知道如何获取扩展属性,并在 XML 中找到该值的所有实例(它们可能隐藏在文本和内部属性中)并将它们转换为* * (4 *)。
下面的例子只是一个例子。我不能对 XSL 进行硬编码以查看特定节点,它需要查看 xml 中的所有文本/属性文本(原因是有 5+ 个不同版本的 XML 将应用于此)。
我需要在节点中找到扩展,然后从 XML 的其余部分替换(真正删除)该值。我正在寻找适合所有消息的 1 解决方案,因此全局搜索-> 擦除扩展值。
例子:
<identifiedPerson classCode="IDENT">
<id root="2.16.840.1.113883.3.51.1.1.6.1" extension="9494949494949" displayable="true" />
<addr use="PHYS">
<city>KAMLOOPS</city>
<country>CA</country>
<postalCode>V1B3C1</postalCode>
<state>BC</state>
<streetAddressLine>1A</streetAddressLine>
<streetAddressLine>2A</streetAddressLine>
<streetAddressLine>9494949494949</streetAddressLine>
<streetAddressLine>4A</streetAddressLine>
</addr>
<note text="9494949494949 should be stars"/>
应该是(下面的 XSLT 已经用匹配的 OID 屏蔽了节点中的扩展)。
<identifiedPerson classCode="IDENT">
<id root="2.16.840.1.113883.3.51.1.1.6.1" nullFlavor="MSK" displayable="true" />
<addr use="PHYS">
<city>KAMLOOPS</city>
<country>CA</country>
<postalCode>V1B3C1</postalCode>
<state>BC</state>
<streetAddressLine>1A</streetAddressLine>
<streetAddressLine>2A</streetAddressLine>
<streetAddressLine>****</streetAddressLine>
<streetAddressLine>4A</streetAddressLine>
</addr>
<note text="**** should be stars"/>
任何帮助,将不胜感激。
我能够使用 XSL 2.0
我有当前的 XSL.IT 工作正常。它匹配根为 '2.16.840.1.113883.3.51.1.1.6.1' 的任何标签,杀死所有属性并添加 nullFlavor="MSK"。但是,这不会在整个 XML 中搜索相同的 #。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="attrToKeep" select="'root'" />
<xsl:template match="* | node()">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="@*">
<xsl:choose>
<xsl:when test="../@root = '2.16.840.1.113883.3.51.1.1.6.1'">
<xsl:copy-of select=".[contains($attrToKeep, name())]" />
<xsl:attribute name="nullFlavor">MSK</xsl:attribute>
<!-- Need some way to use the value found in this node and hide the extension -->
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="." />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
任何帮助,将不胜感激。
谢谢,