У меня есть следующий XML, и я хочу переименовать ENTINFO_ACCT-TYPE
в ENTINFO_ACCT_TYPE
(наряду со многими другими преобразованиями, замеченными в моем XSLT).Однако XSLT не удается переименовать ENTINFO_ACCT-TYPE
.Я пытался переместить его до добавления корневого тега NORMDOC
, и это не имеет значения.Что я делаю неправильно?Я проверял все на этом веб-сайте.
XML
<?xml version="1.0" encoding="UTF-8"?>
<NORMDOC>
<DOC>
<DOCID>123456789</DOCID>
<FI fitype="B" xref="54815594127">
<FIName>BANK OF FURY, N.A.</FIName>
<FITIN>987654321</FITIN>
</FI>
<OIs>
<OI xref="54815594128">
<OIName>BANK OF FURY, N.A.</OIName>
</OI>
</OIs>
<Subjects>
<Subject stype="PER" xref="54815594140">
<SubjectFullName type="L">SMITH/JANE/C</SubjectFullName>
<SubjectLastName type="L">SMITH</SubjectLastName>
<SubjectFirstName type="L">JANE</SubjectFirstName>
</Subject>
</Subjects>
<TXT>
<S sid="123456789-SENT-001">Refer to <ENAMEX type="BANKDIV" id="BAN-123456789-000">FCI</ENAMEX>
<NUMEX type="CASENUM" id="CAS-123456789-001">Case # FRD-123</NUMEX>.</S>
<S sid="123456789-SENT-075">For assistance contact <ENAMEX type="BANK" id="BAN-123456789-323">BANK OF FURY</ENAMEX> Law Enforcement Liaison at <IDEX type="PHONE" id="PHO-123456789-324">000-000-0000</IDEX> or <CYBEX type="EMAIL" id="EMA-123456789-325">email@bankoffury.com</CYBEX>.</S>
</TXT>
</DOC>
<ENTINFO ID="ACC-123456789-013"
TYPE="ACCOUNT"
NORM="333222111000"
REFID="ACC-123456789-013"
ACCT-TYPE="CHK"
MENTION="MI checking account # 333222111000"/>
<ENTINFO ID="ACC-123456789-027"
TYPE="ACCOUNT"
NORM="000111222333444"
REFID="ACC-123456789-027"
ACCT-TYPE="UNK"
MENTION="debit card #s 000111222333444"/>
</NORMDOC>
XSLT (код для переименования в последнем разделе)
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/NORMDOC">
<xsl:apply-templates select="DOC"/>
<ENTINFO>
<xsl:apply-templates select="ENTINFO"/>
</ENTINFO>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="TXT">
<RAW_TXT>
<xsl:value-of select="."/>
</RAW_TXT>
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="S">
<xsl:copy>
<xsl:apply-templates select="*" mode="extra"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*" mode="extra">
<xsl:element name="{name()}_{@type}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="ENTINFO">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:element name="ENTINFO_{name()}">
<xsl:value-of select="." />
</xsl:element>
</xsl:for-each>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<NORMDOC>
<xsl:apply-templates/>
</NORMDOC>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="NORMDOC/ENTINFO/ENTINFO/ENTINFO_ACCT-TYPE">
<ENTINFO_ACCT_TYPE><xsl:apply-templates/></ENTINFO_ACCT_TYPE>
</xsl:template>
</xsl:stylesheet>
Ожидается (сокращенно)
<NORMDOC>
<DOC>
...
</DOC>
<ENTINFO>
<ENTINFO>
<ENTINFO_ID>ACC-123456789-027</ENTINFO_ID>
<ENTINFO_TYPE>ACCOUNT</ENTINFO_TYPE>
<ENTINFO_NORM>000111222333444</ENTINFO_NORM>
<ENTINFO_REFID>ACC-123456789-027</ENTINFO_REFID>
<ENTINFO_ACCT_TYPE>UNK</ENTINFO_ACCT-TYPE>
<ENTINFO_MENTION>debit card #s 000111222333444</ENTINFO_MENTION>
</ENTINFO>
</ENTINFO>
</NORMDOC>