我有一个xml文档(此xml格式不正确)如下
<ads>
<adv>
<a>BURGER & BROWN ENGINEERING</a>
<b>123*3491</b>
<adv>
<adv>
<x>Roster Service</x>
<y>BROWN & BURGER ENGINEERING</y>
<z>905*3490</z>
<adv>
<ads>
我希望有一个XSLT将XML转换为此。
i)&符号(&amp;)应替换为“and”
ii)*应替换为“”
<ads>
<adv>
<a>BURGER and BROWN ENGINEERING</a>
<b>123 3491</b>
<adv>
<adv>
<x>Roster Service</x>
<y>BROWN and BURGER ENGINEERING</y>
<z>905 3490</z>
<adv>
<ads>
我有一个xsl如下,但这不符合我的要求。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="translate(., '&', ' and ')" />
<xsl:value-of select="translate(., '*', ' ')" />
</xsl:template>
答案 0 :(得分:2)
给出格式良好的 XML输入,例如:
<强> XML 强>
<ads>
<adv>
<a>BURGER & BROWN ENGINEERING</a>
<b>123*3491</b>
</adv>
<adv>
<x>Roster Service</x>
<y>BROWN & BURGER ENGINEERING</y>
<z>905*3490</z>
</adv>
</ads>
您可以使用以下样式表:
XSLT 2.0
<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:template match="@*|*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="replace(translate(., '*', ' '), '&', 'and')" />
</xsl:template>
</xsl:stylesheet>
返回:
<?xml version="1.0" encoding="UTF-8"?>
<ads>
<adv>
<a>BURGER and BROWN ENGINEERING</a>
<b>123 3491</b>
</adv>
<adv>
<x>Roster Service</x>
<y>BROWN and BURGER ENGINEERING</y>
<z>905 3490</z>
</adv>
</ads>
答案 1 :(得分:2)
您的输入不是XML,因此没有专门用于处理XML的工具能够读取它。
使用错误XML的最佳解决方案始终是修复生成它的软件。但是,如果该软件是由一些不关心质量或支持或用户的牛仔服装编写的,那么这可能是不可能的。
如果您需要修复错误的XML,那么您将需要使用非XML工具来完成它,通常是Perl / awk / sed的某种组合。当然,这并不总是可能的,因为如果软件生成的格式不正确,那么它也可能生成格式良好但包含错误信息的XML。
未能逃脱&符号是一个非常常见的问题,这取决于您需要多好的修复。有时,您可以通过替换任何后面没有字母,#39;#&#39;或&
数字的&
来解决99%的问题。