gpt4 book ai didi

XSLT 规范化空间不起作用

转载 作者:行者123 更新时间:2023-12-01 00:04:48 24 4
gpt4 key购买 nike

这是我输入的xml

<?xml version="1.0" encoding="utf-8"?>
<content>
<body>
<p>This      is a Test</p>
<p>
Toronto,           ON - Text added here.
</p>
</body>
</content>

这是我的样式表

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:str="http://exslt.org/strings"
extension-element-prefixes="str">

<xsl:output method="xml" indent="no" />


<!-- Root / document element-->
<xsl:template match="/">
<xsl:apply-templates select="node()"/>
</xsl:template>

<xsl:template match="*/text()">
<xsl:value-of select="normalize-space()"/>
</xsl:template>

</xsl:stylesheet>

当我使用 ASP.NET XslCompiledTransform 的转换方法应用此转换并在浏览器中查看结果时,我仍然可以看到空格,并且 normalize-space 似乎不起作用。

谁能告诉我我做错了什么

非常感谢!

最佳答案

这个转换:

<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="*[not(text()[2])]/text()">
<xsl:value-of select="normalize-space()"/>
</xsl:template>
</xsl:stylesheet>

应用于提供的源 XML 文档时:

<content>
<body>
<p>This is a Test</p>
<p>
Toronto, ON - Text added here.
</p>
</body>
</content>

产生想要的、正确的结果:

<content><body><p>This is a Test</p>
<p>Toronto, ON - Text added here.</p>
</body>
</content>

更新:

如果问题是由类似空格的字符引起的,这里有一个解决方案,它将不需要的(每个文本节点最多 40 个)字符替换为空格,然后 normalize-space() 将完成它的工作:

<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:variable name="vAllowed" select=
"concat('ABCDEFGHIJKLMNOPQRSTUVWXUZ', 'abcdefghijklmnopqrstuvwxyz',
'0123456789.,-')"/>
<xsl:variable name="vSpaces" select="' '"/>

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="*[not(text()[2])]/text()">
<xsl:value-of select=
"normalize-space(translate(., translate(.,$vAllowed,''), $vSpaces))"/>
</xsl:template>
</xsl:stylesheet>

当转换应用于此源 XML 文档时:

<content>
<body>
<p>This \\\ is a ~~~ Test</p>
<p>
Toronto, ``` ON - Text added here.
</p>
</body>

产生了想要的、正确的结果:

<content>
<body>
<p>This is a Test</p>
<p>Toronto, ON - Text added here.</p>
</body>
</content>

关于XSLT 规范化空间不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29476885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com