Обработка XML с помощью XSL - PullRequest
       0

Обработка XML с помощью XSL

0 голосов
/ 30 августа 2010

У меня вопрос из двух частей ...

У меня есть какой-то XML, который выглядит следующим образом:

<trans-unit id="70" restype="x-text:p">
<source xml:lang="en-en">option 4</source>
<target xml:lang="fr-fr">option 4</target>
</trans-unit>

<trans-unit id="71" restype="x-text:p">
<source xml:lang="en-en">option 5</source>
<target xml:lang="fr-fr">option 5</target>
</trans-unit>

<trans-unit id="72" restype="x-text:p">
<source xml:lang="en-en">option 6</source>
<target xml:lang="fr-fr">option 6</target>
</trans-unit>

Теперь, если я хочу только отобразить, скажем, цель (игнорируя источник), это идеальная работа для XSL, верно? Я просто пишу шаблон, и я в порядке?

<trans-unit id="70" restype="x-text:p">
<target xml:lang="fr-fr">option 4</target>
</trans-unit>

<trans-unit id="71" restype="x-text:p">
<target xml:lang="fr-fr">option 5</target>
</trans-unit>

<trans-unit id="72" restype="x-text:p">
<target xml:lang="fr-fr">option 6</target>
</trans-unit>

и если бы я хотел добавить какой-нибудь стиль, подобный этому:

<trans-unit id="72" restype="x-text:p">
<target xml:lang="fr-fr"><span class="myclass>option 6</span></target>
</trans-unit>

XSL - снова путь?

UPDATE: Исходный XML

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="my.xsl"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"><file original="sample-document.odt/content.xml" source-language="en-en" target-language="fr-fr" datatype="x-undefined" xmlns:x="http://net.sf.okapi/ns/xliff-extensions" x:inputEncoding="UTF-8" x:configId="">
<body>
<trans-unit id="1" restype="x-text:p">
<source xml:lang="en-en">ENGA collection of ideas about Word Processing (also a test document for Docvert)</source>
<target xml:lang="fr-fr">FRAA collection of ideas about Word Processing (also a test document for Docvert)</target>
</trans-unit>
<trans-unit id="3" restype="x-text:h">
<source xml:lang="en-en">We Can Put an End to Word Attachments</source>
<target xml:lang="fr-fr">We Can Put an End to Word Attachments</target>
</trans-unit>
<trans-unit id="5" restype="x-text:p">
<source xml:lang="en-en"><g id="1"><g id="2"></g></g>Don't you just hate receiving Word documents in email messages? Word attachments are annoying, but worse than that, they impede people from switching to free software. Maybe we can stop this practice with a simple collective effort. All we have to do is ask each person who sends us a Word file to reconsider that way of doing things.</source>
<target xml:lang="fr-fr"><g id="1"><g id="2"></g></g>Don't you just hate receiving Word documents in email messages? Word attachments are annoying, but worse than that, they impede people from switching to free software. Maybe we can stop this practice with a simple collective effort. All we have to do is ask each person who sends us a Word file to reconsider that way of doing things.</target>
</trans-unit>
</body>
</file>
</xliff>

Ответы [ 2 ]

1 голос
/ 30 августа 2010

Эта таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="source"/>
    <xsl:template match="target/text()[.='option 6']">
        <span class="myclass">
            <xsl:value-of select="."/>
        </span>
    </xsl:template>
</xsl:stylesheet>

С этим входом:

<root>
    <trans-unit id="70" restype="x-text:p">
        <source xml:lang="en-en">option 4</source>
        <target xml:lang="fr-fr">option 4</target>
    </trans-unit>
    <trans-unit id="71" restype="x-text:p">
        <source xml:lang="en-en">option 5</source>
        <target xml:lang="fr-fr">option 5</target>
    </trans-unit>
    <trans-unit id="72" restype="x-text:p">
        <source xml:lang="en-en">option 6</source>
        <target xml:lang="fr-fr">option 6</target>
    </trans-unit>
</root>

Выход:

<root>
    <trans-unit id="70" restype="x-text:p">
        <target xml:lang="fr-fr">option 4</target>
    </trans-unit>
    <trans-unit id="71" restype="x-text:p">
        <target xml:lang="fr-fr">option 5</target>
    </trans-unit>
    <trans-unit id="72" restype="x-text:p">
        <target xml:lang="fr-fr">
            <span class="myclass">option 6</span>
        </target>
    </trans-unit>
</root>
1 голос
/ 30 августа 2010

XSL - это язык, который преобразует один диалект XML в другой.

Часть этого - выбор узлов для использования в качестве источника и выбор выходных данных - различные элементы, атрибуты и т. Д.

Итак, XSL может быть правильным выбором для вас в отношении обоих требований.

Тем не менее, вы можете обнаружить, что использование синтаксического анализатора XML, итерации по узлам и непосредственное добавление деталей может работать для вас лучше.

Трудно понять из приведенного вами простого примера, поскольку оба подхода будут работать нормально. Если вам нужна массовая трансформация, XSL определенно поможет.

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