То, что я пытаюсь сделать, довольно просто, но я не могу найти путь к. Я просто хочу выполнить итерации по детям узла, исключая первого ребенка.
Например, в этом отрывке XML, я хотел бы весь <bar>
элементы, кроме первого:
<foo>
<Bar>Example</Bar>
<Bar>This is an example</Bar>
<Bar>Another example</Bar>
<Bar>Bar</Bar>
</foo>
Нет никакого общего атрибута, которым я могу отфильтровать (как id
тег или что-то подобное).
Какие-либо предложения?
Вы всегда можете использовать позицию
вместе с xsl: when
.
<xsl:when test="node[position() > 1]">
<!-- Do my stuff -->
</xsl:when>
/foo/Bar[position() > 1]
Например, в C #:
[Test]
public void PositionBasedXPathExample()
{
string xml = @"<foo>
<Bar>A</Bar>
<Bar>B</Bar>
<Bar>C</Bar>
</foo>";
XDocument xDocument = XDocument.Parse(xml);
var bars = xDocument.XPathSelectElements("/foo/Bar[position() > 1]")
.Select(element => element.Value);
Assert.That(bars, Is.EquivalentTo(new[] { "B", "C" }));
}
/ foo / bar [position ()> 1]
выбирает все элементы bar
, за исключением первого, который являются дочерними элементами верхнего элемента, которым является foo
.
(// bar) [position ()> 1]
выбирает все элементы bar
в любом XML-документе, за исключением первого элемента bar
в этом документ.
Использование шаблонов приложений
:
<xsl:apply-templates select="foo/Bar[position() > 1]" />
или то же самое xpath для для каждого
:
<xsl:for-each select="foo/Bar[position() > 1]">
…
</xsl:for-each>