2017-02-08 4 views
0

У меня есть XML-файл, содержащий элементы с атрибутами id. Мне нужно иметь значения id в правильном порядке, рассчитывая из корневого элемента. Таким образом, вместо этого один:Как я могу с XSLT получить счет всех предыдущих элементов, которые указали имя атрибута?

 <body> 
      <p id="1"> 
       <span id="3"/> 
      </p> 
      <p/> 
      <div id="8"> 
       <p id="2"/> 
       <ul> 
        <li/> 
        <li id="9"> 
         <span id="12"/> 
        </li> 
        <li/> 
        <li id="13"> 
         <span id="7"/> 
        </li> 
       </ul> 
      </div> 
     </body> 

Я хотел бы, чтобы это:

 <body> 
      <p id="1"> 
       <span id="2"/> 
      </p> 
      <p/> 
      <div id="3"> 
       <p id="4"/> 
       <ul> 
        <li/> 
        <li id="5"> 
         <span id="6"/> 
        </li> 
        <li/> 
        <li id="7"> 
         <span id="8"/> 
        </li> 
       </ul> 
      </div> 
     </body> 
+1

использование атрибутов id, начинающихся с чисел, обескураживается и не поддерживается в html 4 [читать дальше] (https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id) – happymacarts

ответ

1

Используйте шаблон тождественное преобразование плюс один для id атрибутов:

<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="@id"> 
    <xsl:attribute name="id"> 
     <xsl:number count="*[@id]" level="any"/> 
    </xsl:attribute> 
</xsl:template> 

http://xsltransform.net/3NSSEvD