我有一个html,我想使用html-agility-pack库将其解析为xml。这是xsl:
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<BusinessDetail>
<Name>
<xsl:value-of select="//span[@class='pp-place-title']/span" />
</Name>
<Address>
<xsl:value-of select="//span[@class='pp-headline-item pp-headline-address']/span"/>
</Address>
...
</BusinessDetail>
</xsl:template>
</xsl:stylesheet>
我只想在根节点添加命名空间。预期的输出是:
<BusinessDetail xmlns:g="http://myurl.com">
<Name>
...
</Name>
..
</BusinessDetail>
所以将我的xls改为:
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<BusinessDetail xmlns:g="http://myurl.com">
<Name>
<xsl:value-of select="//span[@class='pp-place-title']/span" />
</Name>
<Address>
<xsl:value-of select="//span[@class='pp-headline-item pp-headline-address']/span"/>
</Address>
...
</BusinessDetail>
</xsl:template>
</xsl:stylesheet>
但命名空间不会出现在输出中。有什么不对吗?
答案 0 :(得分:0)
我担心你想要创建的输出毫无意义!想想以下文档的含义:
<BusinessDetail xmlns:g="http://myurl.com">
<Name>
...
</Name>
..
</BusinessDetail>
您正在定义名称空间前缀'g'并将其映射到URI http://myurl.com
,但是,您的文档不包含任何定义为在此名称空间内的元素! XSLT的输出完全正确地剥离了这个冗余的名称空间声明。你的意思是这样做:
<BusinessDetail xmlns="http://myurl.com">
<Name>
...
</Name>
..
</BusinessDetail>
这可确保BusinessDetail
及其所有子元素都在http://myurl.com
命名空间中。
答案 1 :(得分:0)
您需要将命名空间添加到样式表
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:g="http://myurl.com">
<xsl:template match="/">
<BusinessDetail>
<Name>
<xsl:value-of select="//span[@class='pp-place-title']/span" />
</Name>
<Address>
<xsl:value-of select="//span[@class='pp-headline-item pp-headline-address']/span"/>
</Address>
...
</BusinessDetail>
</xsl:template>
</xsl:stylesheet>
但是,除非您指定使用该命名空间的任何节点(您的示例没有,除了定义它之外),否则它将不会显示在输出中。