我有以下XML,我想将ENTINFO_ACCT-TYPE
重命名为ENTINFO_ACCT_TYPE
(以及在XSLT中看到的许多其他转换)。但是,XSLT无法重命名ENTINFO_ACCT-TYPE
。在添加NORMDOC
根标记之前,我尝试过将其移动,但这没有什么不同。我究竟做错了什么?我一直在测试this网站上的所有内容。
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>
答案 0 :(得分:0)
你不能只是改变:
<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="ENTINFO">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:element name="ENTINFO_{translate(name(), '-', '_')}">
<xsl:value-of select="." />
</xsl:element>
</xsl:for-each>
</xsl:copy>
</xsl:template>