У кого-нибудь есть способ конвертировать данные из формата Atom (XML) в JSON? Я бы предпочел бесплатный онлайн-инструмент для этого. Я не могу опубликовать данные, которые я пытаюсь преобразовать в Интернете: поскольку он содержит конфиденциальную информацию.Преобразование Atom (XML) в JSON
ответ
«Преобразование XML в JSON» прост, но XML и JSON - это разные структурные парадигмы. Если ваш XML-документ выглядит следующим образом:
<a>
<b>foo</b>
<c prop="value">bar</c>
</a>
... как вы представляете это в JSON? Есть много вопросов, таких как:
- Имеет ли порядок? (Свойства объекта в JSON неупорядоченны, поэтому после преобразования не существует никакого способа узнать, если
<c>
было до или после<b>
) - Если есть только один
<b>
, это означает, что это массив одного элемента или просто объект? - Как вы представляете атрибуты? Преобразует ли конвертер между строками (для
"b"
) и объектами с дополнительными свойствами (для"c"
) в зависимости от того, определены ли атрибуты?
Каждый «конвертер XML-JSON», который я видел, несколько изменил подход к этому, поэтому нет «стандартного» поведения, на которое можно положиться.
Итак, для получения полного ответа, я думаю, вам нужно дать более четкое представление о том, как вы хотите, чтобы ваш формат JSON ATOM выглядел.
Если вы просто хотите что-то , и вы будете работать вокруг того, что вы получите, то вы могли бы быть в состоянии сделать это с помощью службы, как Yahoo Pipes (например here, я уверен, что есть больше).
Тем не менее, вы находитесь на прихоти любого фактического конвертера, который используется за кулисами, что может иметь странное поведение (например, в один прекрасный день ваш исходный фид добавляет атрибут, а ваш результат резко меняется).
Чтобы уменьшить двусмысленность, такой переводчик должен проверить схему XML/DTD. –
Мы нашли XSLT здесь:
http://www.bjelic.net/2012/08/01/coding/convert-xml-to-json-using-xslt/#code
и слегка модифицировал его, чтобы обработать ссылки & категории элементов Atom документа с тем, как мы хотим показать его.
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>
<xsl:template match="/*[node()]">
<xsl:text>{</xsl:text>
<xsl:apply-templates select="." mode="detect" />
<xsl:text>}</xsl:text>
</xsl:template>
<xsl:template match="*" mode="detect">
<xsl:choose>
<xsl:when test="name(preceding-sibling::*[1]) = name(current()) and name(following-sibling::*[1]) != name(current())">
<xsl:apply-templates select="." mode="obj-content" />
<xsl:text>]</xsl:text>
<xsl:if test="count(following-sibling::*[name() != name(current())]) > 0">, </xsl:if>
</xsl:when>
<xsl:when test="name(preceding-sibling::*[1]) = name(current())">
<xsl:apply-templates select="." mode="obj-content" />
<xsl:if test="name(following-sibling::*) = name(current())">, </xsl:if>
</xsl:when>
<xsl:when test="following-sibling::*[1][name() = name(current())]">
<xsl:text>"</xsl:text><xsl:value-of select="name()"/><xsl:text>" : [</xsl:text>
<xsl:apply-templates select="." mode="obj-content" /><xsl:text>, </xsl:text>
</xsl:when>
<xsl:when test="count(./child::*) > 0 or count(@*) > 0">
<xsl:text>"</xsl:text><xsl:value-of select="name()"/>" : <xsl:apply-templates select="." mode="obj-content" />
<xsl:if test="count(following-sibling::*) > 0">, </xsl:if>
</xsl:when>
<xsl:when test="count(./child::*) = 0">
<xsl:text>"</xsl:text><xsl:value-of select="name()"/>" : "<xsl:apply-templates select="."/><xsl:text>"</xsl:text>
<xsl:if test="count(following-sibling::*) > 0">, </xsl:if>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="*" mode="obj-content">
<xsl:text>{</xsl:text>
<xsl:apply-templates select="@*" mode="attr" />
<xsl:if test="count(@*) > 0 and (count(child::*) > 0 or text())">, </xsl:if>
<xsl:apply-templates select="./*" mode="detect" />
<xsl:if test="count(child::*) = 0 and text() and not(@*)">
<xsl:text>"</xsl:text><xsl:value-of select="name()"/>" : "<xsl:value-of select="text()"/><xsl:text>"</xsl:text>
</xsl:if>
<xsl:if test="count(child::*) = 0 and text() and @*">
<xsl:text>"text" : "</xsl:text><xsl:value-of select="text()"/><xsl:text>"</xsl:text>
</xsl:if>
<xsl:text>}</xsl:text>
<xsl:if test="position() < last()">, </xsl:if>
</xsl:template>
<xsl:template match="@*" mode="attr">
<xsl:text>"</xsl:text><xsl:value-of select="name()"/>" : "<xsl:value-of select="."/><xsl:text>"</xsl:text>
<xsl:if test="position() < last()">,</xsl:if>
</xsl:template>
<xsl:template match="node/@TEXT | text()" name="removeBreaks">
<xsl:param name="pText" select="normalize-space(.)"/>
<xsl:choose>
<xsl:when test="not(contains($pText, '
'))"><xsl:copy-of select="$pText"/></xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(substring-before($pText, '
'), ' ')"/>
<xsl:call-template name="removeBreaks">
<xsl:with-param name="pText" select="substring-after($pText, '
')"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Надеюсь, что это поможет!
Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа [здесь] (http://meta.stackoverflow.com/a/8259) и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – bummi
Приветствия за то, что вы указали URL-адрес в моем блоге;) –
@BojanBjelic, ваш прием! :-) Этот XSLT нам очень полезен. –
- 1. Преобразование XML в JSON
- 2. Преобразование XML в JSon
- 3. Преобразование XML в JSON
- 4. Преобразование JSON в XML
- 5. Что такое Atom XML?
- 6. Преобразование из JSON в XML
- 7. Преобразование MarkLogic XML в JSON
- 8. JSON.Net Преобразование XML в JSON
- 9. Преобразование XML в D3 JSON
- 10. Преобразование формата XML в JSON
- 11. преобразование xml в json android
- 12. Угловые: Преобразование XML в JSON
- 13. Массовое преобразование XML в JSON
- 14. Преобразование XML-данных в JSON
- 15. Динамическое преобразование XML в JSON
- 16. Преобразование вложенного XML в JSON
- 17. Преобразование массива JSON в XML
- 18. Преобразование XML в форматированный JSON
- 19. Преобразование JSON в XML и сохранение XML
- 20. InvalidOperationException десериализации Atom XML
- 21. XML Atom Pagination
- 22. Преобразование xml в php
- 23. Форматы OData JSON & ATOM
- 24. XML DomIt преобразование & в &
- 25. Преобразование ответа xml на json
- 26. Преобразование XML-дерево JSon дерева
- 27. Преобразование JSON в XML в C#
- 28. Преобразование xml в json в java
- 29. Преобразование xml в json в dataweaver mule
- 30. Преобразование XML в JSON в Wso2
Какой формат вы на самом деле хотите? Просто говоря, «JSON» оставляет вещи немного расплывчатыми, так как внутренняя структура может быть абсолютно любой. – cloudfeet
@cloudfeet Я хочу, чтобы JSON отформатировал после имен и структуры полей, которые представлены в XML. Просто прям от Atom (XML) до JSON. –