проблема с массивом xslt - PullRequest
       3

проблема с массивом xslt

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

Я конвертирую xml в json, используя xslt. Проблема, с которой я столкнулся, заключается в следующем: если у определенного элемента xml нет родных элементов, он не возвращается в виде массива.

        <xsl:if test="count(preceding-sibling::*[name() = name(current())]) = 0">
        <xsl:text>"</xsl:text><xsl:value-of select="name()" /><xsl:text>":</xsl:text>
        <xsl:if test="count(following-sibling::*[name() = name(current())]) &gt; 0">
            <xsl:text>[</xsl:text>
        </xsl:if>
    </xsl:if>

То, что я хотел бы, это если бы у братьев и сестер родительского элемента был тот же элемент (ы), что и у массива, то этот элемент также должен быть массивом.

так что я бы хотел:

<element>
 <child_element>
  <grandchild_element>
     only one
  </grandchild_element>
 </child_element>
 <child_element>
  <grandchild_element>
     one
  </grandchild_element>
  <grandchild_element>
     two
  </grandchild_element>
 </child_element>

Я бы хотел следующий вывод

{
    "element": {
        "child-element": [
            {
                "grandchild_element": "only one"
            }
        ],
        "child-element": [
            {
                "grandchild_element": "one" ,
                "grandchild_element": "two"
            }
        ]
    }
}

спасибо

1 Ответ

2 голосов
/ 12 сентября 2011

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

Один изПроблемы, с которыми вы столкнетесь, заключаются в том, что если вы попытаетесь сделать это без знания схемы, вам будет очень трудно понять, когда выводить один объект JSON, а когда выводить массив из одного члена.Например, если у кого-то есть один телефонный номер, вы выведете одно значение, но если у него их несколько, вы получите массив: вы не можете знать, когда видите один телефонный номер, ожидает ли получатель массивтелефонные номера.Это не проблема кодирования, а проблема в том, что в экземпляре XML недостаточно информации для проведения различия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...