количество элементов в XPath - PullRequest
       0

количество элементов в XPath

26 голосов
/ 13 сентября 2011
...
<element>
    <e:Element1 xmlns:e="mynamespace" > ... </.. >
    <e:Element1 xmlns:e="mynamespace" > ... </.. >
    <e:Element1 xmlns:e="mynamespace" > ... </.. >
    <a/>
</element>
...

и этот XPath:

//*[local-name()='element']/count(*) вернуть 4, что в порядке.но теперь я хочу узнать количество элементов 1, что 3. Я пробую много возможностей, но безуспешно.Я должен использовать local-name и namespace-uri()

Ответы [ 3 ]

43 голосов
/ 13 сентября 2011

Вы можете попробовать следующее:

count(//element/Element1[namespace-uri()='mynamespace'])
2 голосов
/ 13 сентября 2011

Если вы используете XPath из среды, такой как Java или C #, вы должны сначала привязать префикс к пространству имен, который зависит от используемого вами API, но будет выглядеть примерно так:

xpath.declareNamespace("f", "mynamespace")

а затем оцените выражение XPath

count(element/f:Element1)

Я специально выбрал префикс, отличный от префикса в исходном документе, просто чтобы показать, что вы можете использовать любой префикс, который вам нравится, но, конечно, ваш код более читабелен, если выпоследовательны в выборе префиксов.

0 голосов
/ 13 сентября 2011

Для следующего действительного XML

<element>
  <e:Element1 xmlns:e="mynamespace"></e:Element1>
  <e:Element1 xmlns:e="mynamespace"></e:Element1>
  <e:Element1 xmlns:e="mynamespace"></e:Element1>
  <a/>
</element>

этот XSL

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:e="mynamespace">
<xsl:template match="/">
    <xsl:value-of select="count(element/e:Element1)"/>
</xsl:template>
</xsl:stylesheet>

дает желаемый вывод 3 .

Селекторквалифицирован с правильным пространством имен.

Вы были близки в своем вопросе, и вы могли бы отбросить пространство имен и использовать вместо него следующий XSL:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <xsl:value-of select="count(element/*[local-name()='Element1'])"/>
</xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...