提问人:CMarcera 提问时间:8/11/2022 最后编辑:CMarcera 更新时间:8/11/2022 访问量:71
XSL 在 XML 中无法使用不同的命名空间
XSL not working with different namespace in XML
问:
我正在迁移 XSL 转换,但新的 XML 输入不再具有 XML 命名空间。
下面的 XSL 曾经输出“测试标题”,但现在不生成任何内容。
旧 XML:
<article xmlns:as="http://www.company.com/schemas/articleschema">
<parastyles>
<parastyle name="Body Copy" uid="292"/>
<parastyle name="Headline Regular" uid="311"/>
</parastyles>
<charstyles>
<charstyle name="Character Style 1" uid="285"/>
</charstyles>
<story name="head">
<runs>
<run p="311" c="285">Test Headline</run>
</runs>
</story>
<story name="body">
<runs>
<run p="292" c="285">
<eol hyphenated="true"/>Met facipsam lam sinti do<eol/>lorendae dem endae lita sim
<eol hyphenated="true"/>fuga. Nam, ut que venda es si<eol/>tame nimin con ex exerisque
</run>
</runs>
</story>
</article>
新 XML:
<article xmlns="http://www.company.com/schemas/articleschema">
<parastyles>
<parastyle name="Body Copy" uid="292"/>
<parastyle name="Headline Regular" uid="311"/>
</parastyles>
<charstyles>
<charstyle name="Character Style 1" uid="285"/>
</charstyles>
<story name="head">
<runs>
<run p="311" c="285">Test Headline</run>
</runs>
</story>
<story name="body">
<runs>
<run p="292" c="285">
<eol hyphenated="true"/>Met facipsam lam sinti do<eol/>lorendae dem endae lita sim
<eol hyphenated="true"/>fuga. Nam, ut que venda es si<eol/>tame nimin con ex exerisque
</run>
</runs>
</story>
</article>
唯一的区别是命名空间的变化:xmlns:as
这是我的XSL,它适用于旧XML但不适用于新XML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates select="//story[@name='head']"/>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
<xsl:template match="eol[@hyphenated]">
<xsl:text></xsl:text>
</xsl:template>
<xsl:template match="eol">
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
我敢肯定这是一件非常简单的事情,但我对命名空间不够熟悉,无法弄清楚。提前致谢!
更新 -- XSL 解决方案:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:as="http://www.company.com/schemas/articleschema"
exclude-result-prefixes="as">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates select="//as:story[@name='head']"/>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
<xsl:template match="eol[@hyphenated]">
<xsl:text></xsl:text>
</xsl:template>
<xsl:template match="eol">
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
答: 暂无答案
上一个:固有命名空间 XSLT 问题
评论
as
as:something
eol
eol
as