2013-03-03 135 views
2

什么是XPath数据模型中的属性节点?什么时候一个特定的节点成为一个属性节点?什么是属性节点

如果任何机构可以提供一个非常有用的属性节点的例子。

在此先感谢。

+0

野兽,你需要学习一些XML的基础知识。这对您比单独提问更有用。 – 2013-03-03 15:36:54

+0

Dimitre。我最近开始学习XML,XPath和XSLT。如果你能给我提供任何学习XML的好链接,那么这对我来说是非常有用的。 – Beast 2013-03-03 16:17:50

+0

野兽,我可以为您提供良好的XSLT/XPath书籍的链接,但他们都假设您已经知道XML是什么:http://stackoverflow.com/questions/339930/any-good-xslt-tutorial-book- blog-site-online/341589#341589 – 2013-03-03 16:43:23

回答

1

的OP已经澄清了评论,他的问题是:

是否有可能与任何父元素创建属性节点?

是,在XSLT 2.0一个可以写:

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

<xsl:variable name="vAttr" as="attribute()"> 
    <xsl:attribute name="x">y</xsl:attribute> 
</xsl:variable> 

<xsl:template match="/*"> 
    <xsl:copy> 
     <xsl:copy-of select="$vAttr"/> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

当这种转变被应用在下面的XML文档:

<t/> 

想要的,正确的结果生产

<t x="y"/> 

因此,属性被创建为一个独立的项目,没有任何父元素。然后,我们可以将它的一个实例复制到任何元素

+0

感谢Dimitre为您提供的所有帮助! – Beast 2013-03-04 05:42:48

+0

@野兽,不客气。 – 2013-03-04 06:34:06

0

在下面bar="baz"的XML是具有名称bar和值baz一个属性:

<foo bar="baz"/> 

的属性不“成为”的属性;它不是属性就是属性。

要访问的属性在XPath中,你可以使用@(这只是为attribute::轴的快捷方式):

/foo/@bar 

也看到这些链接对XML基础知识多一点信息。

+0

谢谢丹尼尔。但在上面的例子中,foo会被称为属性节点吗? – Beast 2013-03-03 08:13:42

+0

@Beast - 不,'foo'是一个元素节点。 – 2013-03-03 08:15:06

+0

@Beast - 有关不同类型节点的更多信息,请参阅上面的Datamodel.html链接。 – 2013-03-03 08:16:37

2

它是保持所有匹配的属性的属性值的节点。例如,如果您有以下标签:

<tag name="foo"> 
    <child>Bar</child> 
</tag> 

然后XPath查询//@name将返回“foo”的结果。如果有n标签具有该属性,它将获取属性值的所有n

属性节点本身由两部分组成 - 名称和值。因此,在上面的例子中,它将是name="foo"

+0

感谢您的回复cthulhu。在你的例子中,名字是属性节点,标签是父元素。我对你的答案的理解是正确的吗?我的另一个问题是,是否有可能创建没有任何父元素的属性节点?如果可能,你能提供一个例子吗? – Beast 2013-03-03 16:15:25

+0

@Beast - 在XML中,你无法做到这一点,并且没有逻辑背后的逻辑。正如Dimitre提到的那样,您可以在XSLT中将属性作为独立对象应用于符合特定条件的某些元素,因此当文档转换时,此属性将被附加到元素。但是,它又与XML本身无关。 – cth 2013-03-03 19:29:39

+0

谢谢克苏鲁! – Beast 2013-03-04 05:11:33