我有一個XSL需要過濾掉XML中找到的特定數據。用****替換XML中的所有字符串實例
某處在我的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>
任何幫助,將不勝感激。
感謝,
在文本中查找和替換時可以正常工作。屬性會發生什麼? –
將模板更改爲匹配// @ * |文本(),它很好用! –
嗯,似乎我把match =「// @ * | text()」中的更新刪除了所有的屬性,並將這些值放入實際的xml節點中。 –