【发布时间】:2020-03-02 01:33:43
【问题描述】:
当我在我的 xml 中获得特殊字符时,XSL 转换会引发错误。例如由于 & 导致的转换错误。如何转义特殊字符并将其作为模板应用于整个文件,而不是针对每个节点都这样做,因为任何字段中都可能存在特殊字符并且字符可能不同。
<xsl:template match="node()">
<t> " ' < & ></t>
</xsl:template>
首席执行官兼运营官
XML:
<ad:Sale_Data xmlns:ad="urn:com.ad.report/saleslead">
<ad:Sale_Tx_Entry>
<ad:name>prominent sale</ad:name>
<ad:businessID>209320484</ad:businessID>
<ad:Lead_Organization ad:Descriptor="Chiéf Executive Officér & Operating Officér">
<ad:ID ad:type="AID">sadlksalfkdki23i204urfdfmd9mdscdkhytt</ad:ID>
<ad:ID ad:type="Business_Model_Sale_Ref_ID">475846759</ad:ID>
</ad:Lead_Organization>
<ad:Management_Hierarchy>
<ad:Lead_Organization_ID>475847049</ad:Lead_Organization_ID>
</ad:Management_Hierarchy>
<ad:storemanager ad:Descriptor="J Loews">
<ad:ID ad:type="AID">sadlksalfkdki23i204urfdfmd9mdscdkhytt</ad:ID>
<ad:ID ad:type="S_ID">754954</ad:ID>
</ad:storemanager>
<ad:SalePerson>
<ad:Sale_Ref_ID>3457578</ad:Sale_Ref_ID>
<ad:Sale_Profile ad:Descriptor="Sale Person1">
<ad:ID ad:type="AID">sadlksalfkdki23i204fdfmd9mdscdkhytt</ad:ID>
<ad:ID ad:type="Sale_Tx_ID">475847</ad:ID>
</ad:Sale_Profile>
<ad:Business_Model ad:Descriptor="3457578 Sale Person1 - Business Development Leader1">
<ad:ID ad:type="AID">sadlksalfkdki23i204urfdfmd9mdscdkhytt</ad:ID>
</ad:Business_Model>
<ad:SalePerson ad:Descriptor="Business Development Leader1">
<ad:ID ad:type="AID">sadlksalfkdki23i204urfdfmd9mdscdkhytt</ad:ID>
<ad:ID ad:type="S_ID">4782</ad:ID>
</ad:SalePerson>
<ad:StoreManager ad:Descriptor="J Loews">
<ad:ID ad:type="AID">sadlksalfkdki23i204urfdfmd9mdscdkhytt</ad:ID>
<ad:ID ad:type="S_ID">754954</ad:ID>
</ad:StoreManager>
</ad:SalePerson>
<ad:SalePerson>
<ad:Sale_Ref_ID>3457579</ad:Sale_Ref_ID>
<ad:Sale_Profile ad:Descriptor="Sale Person2">
<ad:ID ad:type="AID">sadlksalfkdki23i204urfdfmd9mdscdkhytt</ad:ID>
<ad:ID ad:type="Sale_Tx_ID">918328</ad:ID>
</ad:Sale_Profile>
<ad:Business_Model ad:Descriptor="3457579 Sale Person2 - Business Development Leader2">
<ad:ID ad:type="AID">sadlksalfkdki23i204urfdfmd9mdscdkhytt</ad:ID>
</ad:Business_Model>
<ad:SalePerson ad:Descriptor="Business Development Leader2">
<ad:ID ad:type="AID">sadlksalfkdki23i204urfdfmd9mdscdkhytt</ad:ID>
<ad:ID ad:type="S_ID">487548</ad:ID>
</ad:SalePerson>
<ad:StoreManager ad:Descriptor="J Loews">
<ad:ID ad:type="AID">sadlksalfkdki23i204urfdfmd9mdscdkhytt</ad:ID>
<ad:ID ad:type="S_ID">754954</ad:ID>
</ad:StoreManager>
</ad:SalePerson>
</ad:Sale_Tx_Entry>
</ad:Sale_Data>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet exclude-result-prefixes="xsl" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ad="urn:com.ad.report/saleslead">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="linefeed" select="'
'"></xsl:variable>
<xsl:template match="/ad:Sale_Data">
<xsl:text>"BusinessName"|"BusinessCode"|"BusinessStructure"|"BusinessStructureID"|"BusinessStructureManager"|"StoreID"|"SaleProfile"|"BusinessModel"|"SalePerson"|"StoreManager"</xsl:text>
<xsl:apply-templates select="ad:Sale_Tx_Entry/ad:SalePerson"/>
</xsl:template>
<xsl:template match="ad:SalePerson">
<xsl:value-of select="$linefeed"/>
<xsl:text>"</xsl:text>
<xsl:value-of select="ancestor::ad:Sale_Tx_Entry/ad:name"/>
<xsl:text>"|"</xsl:text>
<xsl:value-of select="ancestor::ad:Sale_Tx_Entry/ad:businessID"/>
<xsl:text>"|"</xsl:text>
<xsl:value-of select="ancestor::ad:Sale_Tx_Entry/ad:Lead_Organization/@ad:Descriptor"/>
<xsl:text>"|"</xsl:text>
<xsl:value-of select="ancestor::ad:Sale_Tx_Entry/ad:Management_Hierarchy/ad:Lead_Organization_ID"/>
<xsl:text>"|"</xsl:text>
<xsl:value-of select="ancestor::ad:Sale_Tx_Entry/ad:storemanager/@ad:Descriptor"/>
<xsl:text>"|"</xsl:text>
<xsl:value-of select="ad:Sale_Ref_ID"/>
<xsl:text>"|"</xsl:text>
<xsl:value-of select="ad:Sale_Profile/@ad:Descriptor"/>
<xsl:text>"|"</xsl:text>
<xsl:value-of select="ad:Business_Model/@ad:Descriptor"/>
<xsl:text>"|"</xsl:text>
<xsl:value-of select="ad:SalePerson/@ad:Descriptor"/>
<xsl:text>"|"</xsl:text>
<xsl:value-of select="ad:StoreManager/@ad:Descriptor"/>
<xsl:text>"</xsl:text>
</xsl:template>
</xsl:stylesheet>
【问题讨论】:
-
一些“特殊字符”比其他的更特殊。如果您的输入包含未转义的 & 字符(如您的示例),则它不是 XML,XSLT 无法处理。
-
stackoverflow.com/questions/31437121/… - 这可能是您正在寻找的解决方案。
-
感谢大家的回复。我会修复源代码。