2013-06-24 2 views
0

Я должен отображать иерархическую структуру, и мой вход поступает из веб-службы в XML, как этот:Иерархическая XML в JSON

<Nodes> 
    <Node> 
     <Data> 
      <Attribute name="ID">Desktop</Attribute> 
      <Attribute name="Parent">administrator</Attribute> 
     </Data> 
     <Relationship> 
      <RelatedNodes> 
       <Node> 
        <Data> 
         <Attribute name="ID">administrator</Attribute>> 
         <Attribute name="Parent">Users</Attribute> 
        </Data> 
        <Relationship> 
         <RelatedNodes> 
          <Node> 
           <Data> 
            <Attribute name="ID">Users</Attribute> 
            <Attribute name="Parent">C</Attribute> 
           </Data> 
           <Relationship> 
            <RelatedNodes> 
             <Node> 
              <Data> 
               <Attribute name="ID">C</Attribute> 
               <Attribute name="Parent"/> 
              </Data> 
             </Node> 
            </RelatedNodes> 
           </Relationship> 
          </Node> 
         </RelatedNodes> 
        </Relationship> 
       </Node> 
      </RelatedNodes> 
     </Relationship> 
    </Node> 
</Nodes> 

и отобразить его ребята UI просят меня, чтобы преобразовать к JSON как этот:

{ 
    children:[{ 
      "title": "C", 
      "level": "1", 
      "children": [ 
       { 
        "title": "Users", 
        "level": "2", 
        "children": [ 
         { 
          "title": "administrator", 
          "level": "3", 
         }, 
         "children": [ 
          { 
           "title": "Desktop", 
           "level": "4", 
          }, 
         ] 
        ] 
       } 
      ] 
    }] 
} 

Любые идеи о том, как это сделать с помощью XSLT или любого другого инструмента преобразования?

Спасибо!

+0

Просто выполните поиск по SO, много способов сделать это, вот Javascript: http://stackoverflow.com/questions/7769829/tool-javascript-to-convert-a-xml-string-to-json – raffian

+0

Ваш XML не является синтаксически действительным (пожалуйста, исправьте его), и неясно, как оно относится к вашему образцу JSON. Что такое 'C' например? – Tomalak

+0

Спасибо Raffian, я нашел множество инструментов для преобразования XML в JSON, но все эти инструменты буквально преобразуют xml, я имею в виду, что каждый элемент xml является элементом JSON. Проблема здесь в том, что у меня есть иерархическая структура xml, и я не знаю глубины, поэтому мне нужно перейти к родительскому элементу, который должен быть более глубоким элементом в структуре и перейти к последнему элементу., Но как я знаю путь родителя, если я не знаю глубины структуры. – user2516482

ответ

0

Вот небольшой stylesheed, чтобы дать вам идею, как сделать дело с этим probelm:

<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' > 
    <xsl:output method='text' encoding="UTF-8"/> 

    <xsl:template match="/"> 
     { 
     <xsl:apply-templates select="//Data[Attribute/@name ='Parent' and Attribute = '' ]/parent::Node" /> 
     } 
    </xsl:template> 

    <xsl:template match="Node" > 
     <xsl:param name="level" select="1" /> 
     children:[ 
     { 
     "title": "<xsl:value-of select="Data/Attribute[@name = 'ID']" />", 
      "level": "<xsl:value-of select="$level"/>, 
      <xsl:apply-templates select="ancestor::Node[1]"> 
       <xsl:with-param name="level" select="$level+1" /> 
      </xsl:apply-templates> 
     } 
     ] 

    </xsl:template> 
</xsl:stylesheet> 

Он начинается с узла, который имеет атрибут с именем «Родитель», но никакой ценности.

Кстати, ваша структура xml довольно странная, и я не знаю, как это должно работать, если структура более сложная (больше узлов на одном уровне).

+0

Спасибо, что отлично работает, я просто изменил xpath в первом шаблоне на: Он не работал для более сложных структур. Большое спасибо! – user2516482

Смежные вопросы