Я получаю эту ошибку, пока я пытаюсь поставить XPath в соответствие. Что я делаю неправильно? Это мой пример XMLMatch XPath create Ошибка загрузки таблиц стилей: не удалось изменить таблицу стилей XSLT
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<ROOT>
<DOCUMENT name="HLSSD">
<TAG1 name="t1">
text0
<ELEM1 id="el1">
text1
</ELEM1>
<MYELEMENT/>
<ELEM2 id="el2">
text2
<ELEM2 id="el3">
text3
</ELEM2>
<MYELEMENT/>
<ELEM1 id="el4">
text4
</ELEM1>
<MYELEMENT/>
text4.5
<ELEM1 id="el5">
text5
</ELEM1>
<TAG3 name="t2"/>
text5.6
<ELEM2 id="el6">
text6
</ELEM2>
</ELEM2>
</TAG1>
<TAG1 name="t3">
<ELEM1 id="el7">
text7
</ELEM1>
<ELEM2 id="el8">
text3
</ELEM2>
<MYELEMENT/>
<ELEM1 id="el9">
text4
</ELEM1>
<MYELEMENT/>
text4.5
<ELEM1 id="el10">
text5
</ELEM1>
<TAG3 name="t4"/>
text5.6
<ELEM2 id="el11">
text6
</ELEM2>
</TAG1>
<TAG2 name="t4">
</TAG2>
<TAG2 name="t5">
</TAG2>
<TAG1 name="t6">
</TAG1>
</DOCUMENT>
</ROOT>
Вот мой XSL код:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body><xsl:apply-templates/></body>
</html>
</xsl:template>
<xsl:template match="DOCUMENT">
<div>
<h1><xsl:value-of select="@name" /></h1>
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="TAG1|TAG2|TAG3">
<div>
<h1><xsl:value-of select="name()" /></h1>
<p><xsl:value-of select="@name" /></p>
<pre><xsl:apply-templates/></pre>
</div>
</xsl:template>
<xsl:template match="ELEM1|ELEM2">
<p>(<xsl:apply-templates/>)</p>
</xsl:template>
<xsl:template match="MYELEMENT/following-sibling::*[count(.|(TAG1|TAG2|TAG3|MYELEMENT)/preceding-sibling::*)=count((TAG1|TAG2|TAG3|MYELEMENT)/preceding-sibling::*)]">
<div>
<h1><xsl:value-of select="name()" /></h1>
<p><xsl:apply-templates/></p>
</div>
</xsl:template>
</xsl:stylesheet>
То, что я хочу, чтобы найти MyElement и все после того, как на том же уровне до первого (одного) из TAG1 или tag2 или TAG3 или MYELEMENT или быть конкретным. Я хочу обернуть тегом div каждый элемент от MYELEMENT до первого из TAG1 или TAG2 или TAG3 или MYELEMENT на том же уровне или в конце родительского элемента.
Вывод должен быть таким:
<html>
<body>
<div>
<h1>DocName</h1>
<div>
<h1>TAG1</h1>
<p>t1</p>
<pre>
text0
<p>(
text1
)</p>
**<DIV>**
**<H1>MYELEMENT</H1>**
<p>(
text2
<p>(
text3
)</p>
**<DIV>**
**<H1>MYELEMENT</H1>**
<p>(
text4
)</p>
**</DIV>**
**<DIV>**
<H1>MYELEMENT</H1>
text4.5
<p>(
text5
)</p>
**</DIV>**
<div>
<h1>TAG3</h1>
<p>t2</p>
<pre></pre>
</div>
text5.6
<p>(
text6
)</p>
)</p>
**</DIV>**
</pre>
</div>
<div>
<h1>TAG1</h1>
<p>t3</p>
<pre>
<p>(
text7
)</p>
<p>(
text3
)</p>
**<DIV>**
**<H1>MYELEMENT</H1>**
<p>(
text4
)</p>
**</DIV>**
**<DIV>**
**<H1>MYELEMENT</H1>**
text4.5
<p>(
text5
)</p>
**</DIV>**
<div>
<h1>TAG3</h1>
<p>t4</p>
<pre></pre>
</div>
text5.6
<p>(
text6
)</p>
</pre>
</div>
<div>
<h1>TAG2</h1>
<p>t5</p>
<pre>
</pre>
</div>
<div>
<h1>TAG2</h1>
<p>t6</p>
<pre>
</pre>
</div>
<div>
<h1>TAG1</h1>
<p>t7</p>
<pre>
</pre>
</div>
</div>
</body>
</html>
Что касается причины ошибки см HTTPS : //www.w3.org/TR/xslt#patterns о шаблонах XSLT: «Путь пути местоположения - это путь местоположения, в шагах которого используются только оси дочернего элемента или атрибута». Таким образом, вы не можете использовать шаблон, как у вас, с шагом, используя 'next-sibling :: *'. –
Хорошо, но это тоже не работает :( –
zelenooq