Как напечатать все ключи в xml словарном значении - PullRequest
0 голосов
/ 26 марта 2020

У меня есть это xml

<namedAnchor>
  {'Beacon': 'ORG', 'One': 'CARDINAL', 'Meadows': 'ORG', 'Congress': 'ORG', 'end of the month': 'DATE', 'second': 'ORDINAL', 'Tuesday': 'DATE', 'Wednesday': 'DATE', 'third': 'ORDINAL', 'New Yorker': 'NORP', 'Scramble for Medical Equipment Johnson City': 'ORG', 'US': 'GPE'}
</namedAnchor>

Мне нужно напечатать все ключи через запятую, разделенные на странице, и я попробовал это.

<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<body>
<xsl:for-each select="tokenize(namedAnchor, ':')">
  <p><xsl:value-of select="." /></p>
</xsl:for-each>
</body>
</html>

Что я хочу, это Beacon, One, Meadows Может кто-нибудь дать ответ на мой вопрос.>

1 Ответ

1 голос
/ 26 марта 2020

Для функции tokenize() требуется XSLT 2.0. libxslt - процессор XSLT 1.0. Однако libxslt поддерживает функцию расширения EXSLT str:split(), поэтому вы можете сделать:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings"
extension-element-prefixes="str">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <output>
        <xsl:for-each select="str:split(normalize-space(namedAnchor), ', ')" >
            <item>
                <xsl:value-of select='translate(substring-before(., ":"), "{}&apos;", "")'/>
            </item>
        </xsl:for-each>
    </output>
</xsl:template>

</xsl:stylesheet>

, чтобы получить:

<?xml version="1.0" encoding="UTF-8"?>
<output>
  <item>Beacon</item>
  <item>One</item>
  <item>Meadows</item>
  <item>Congress</item>
  <item>end of the month</item>
  <item>second</item>
  <item>Tuesday</item>
  <item>Wednesday</item>
  <item>third</item>
  <item>New Yorker</item>
  <item>Scramble for Medical Equipment Johnson City</item>
  <item>US</item>
</output>

Обратите внимание, что это не предполагает Ключ содержит шаблон ", " (что технически они могли бы, так как они заключены в кавычки). Для правильного разбора содержимого вам понадобится процессор XSLT 3.0, который может обрабатывать JSON.

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