首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSL -无法将命名空间添加到根节点

XSL -无法将命名空间添加到根节点
EN

Stack Overflow用户
提问于 2011-05-19 15:43:22
回答 2查看 366关注 0票数 0

我有一个html,我想用html-agility-pack库把它解析成xml。下面是xsl:

代码语言:javascript
复制
<?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>

我只想向根节点添加一个名称空间。预期输出为:

代码语言:javascript
复制
<BusinessDetail xmlns:g="http://myurl.com">
  <Name>
    ...
  </Name>
  ..
</BusinessDetail>

因此,将我的xls更改为:

代码语言:javascript
复制
<?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>

但是命名空间不会出现在输出中。有什么问题吗?

EN

回答 2

Stack Overflow用户

发布于 2011-05-19 15:52:50

我担心您试图创建的输出没有任何意义!思考以下文档的含义:

代码语言:javascript
复制
<BusinessDetail xmlns:g="http://myurl.com">
  <Name>
    ...
  </Name>
  ..
</BusinessDetail>

您正在定义名称空间前缀'g‘并将其映射到URI http://myurl.com,但是,您的文档不包含任何定义在此名称空间中的元素!XSLT的输出正确地去掉了这种冗余的名称空间声明。你是不是想这么做:

代码语言:javascript
复制
<BusinessDetail xmlns="http://myurl.com">
  <Name>
    ...
  </Name>
  ..
</BusinessDetail>

这确保了BusinessDetail及其所有子元素都在http://myurl.com名称空间中。

票数 0
EN

Stack Overflow用户

发布于 2011-05-19 15:54:44

您需要将命名空间添加到样式表中

代码语言:javascript
复制
<?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>

但是,除非您指定使用该名称空间的任何节点(您的示例没有指定,除了定义它之外),否则它不会显示在输出中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6055390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档