Я пытаюсь напечатать имя узла-предка, используя XSLT.Смутно в выборе имени предка
Ниже приведено мое XSLT.
<xsl:apply-templates select="(//title)[1]"/>
<xsl:template match="title">
<xsl:value-of select="name(ancestor::node())"/>
</xsl:template>
И мой XML, как показано ниже.
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<!--ancestor-->
<cd>
<!--parent-->
<title name="titleName" property="propertyName">Empire Burlesque</title>
<!--self-->
<artist>Bob Dylan</artist>
<!--following-sibling-->
<country>USA</country>
<!--following-sibling-->
<company>Columbia</company>
<!--following-sibling-->
<price>10.90</price>
<!--following-sibling-->
<year>1985</year>
<!--following-sibling-->
</cd>
</catalog>
Здесь, когда я использую приведенный ниже оператор.
<xsl:value-of select="name(../..)"/>
еще, когда я использую
<xsl:value-of select="name(ancestor::node())"/>
или
<xsl:value-of select="name(ancestor::*)"/>
это дает мне ниже Exception
XSLT 2.0 Debugging Error: Error: file:///C:/Users/u0138039/Desktop/Training%20Docs/XSLT%20Training/Sample.xsl:209: Wrong occurrence to match required sequence type - Details: - XPTY0004: The parameter value ('3' item(s)) at position '1' of the 'name' function has the wrong occurrence to match the sequence type node() ('zero or one')
, но, чтобы получить имя родителя, когда я использую
<xsl:value-of select="name(parent::*)"/>
уточняйте, пожалуйста, почему это работает для parent
, но не для ancestor
.
Это очень сбивает с толку. Как я могу получить имя ancestor
, используя что-то вроде <xsl:value-of select="name(ancestor::node())"
.
Благодаря
Имя какого предка? Если вы используете 'ancestor :: node()' в контексте элемента 'title', вы выбираете элемент' cd' и элемент 'catalog', а также узел документа, так как все они являются предковыми узлами. ' ' должен работать, чтобы вывести имя бабушки и дедушки. –