我有一个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>但是命名空间不会出现在输出中。有什么问题吗?
发布于 2011-05-19 15:52:50
我担心您试图创建的输出没有任何意义!思考以下文档的含义:
<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名称空间中。
发布于 2011-05-19 15:54:44
您需要将命名空间添加到样式表中
<?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>但是,除非您指定使用该名称空间的任何节点(您的示例没有指定,除了定义它之外),否则它不会显示在输出中。
https://stackoverflow.com/questions/6055390
复制相似问题