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 内のすべてのテキスト/属性テキストを調べる必要があります (これが適用される XML には 5 つ以上の異なるバージョンがあるためです)。
ノードで Extension を見つけて、その値を 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>
どんな助けでも大歓迎です。
ありがとう、