#xml
Вопрос:
У меня есть много файлов, содержащих кодировку, подобную этой:
<link linkaction="immediate" linktype="return" xlink:href="IETM://S50005#S50005-TOOL1"
xreftype="table">
<prompt>Multimeter</prompt>
</link>
Это должно быть заменено этим:
<xref itemid="S50005-TOOL1" wpid="S50005"/>
Необходимо изменить структуру тегов, но сохранить справочную информацию.
Возможно ли это с помощью Notepad ?
Комментарии:
1. Нажмите на кнопку ? в правом верхнем углу окна редактирования, чтобы получить справку по форматированию. Когда вы отредактируете свой вопрос, чтобы включить правильно отформатированный XML, я смогу помочь.
2. На мой взгляд, он, по-видимому, обновлен с правильным синтаксисом
3. Чтобы было более понятно, я хочу заменить все «ссылки» на «внешние ссылки», но хочу получить идентификационную информацию из ссылки и включить ее в замены внешних ссылок.
4. ИМХО, преобразование XSLT лучше всего подходит для этой задачи.
5. Спасибо вам за такой быстрый ответ! Похоже, это действительно дает желаемый результат. Я не уверен, как бы я использовал это для сотен файлов? Можно ли было бы сделать это с помощью Notepad , заменить?
Ответ №1:
Вот решение на основе XSLT. Для этого в Notepad есть плагин XML Tools.
Чтобы сделать входной XML правильно сформированным, мне пришлось добавить пространство имен в корневой тег.
Входной XML
<?xml version="1.0"?>
<root xmlns:xlink="URI">
<link linkaction="immediate" linktype="return"
xlink:href="IETM://S50005#S50005-TOOL1" xreftype="table">
<prompt>Multimeter</prompt>
</link>
<link linkaction="immediate" linktype="return"
xlink:href="IETM://S50005#S50018-TOOL15" xreftype="table">
<prompt>Multimeter</prompt>
</link>
</root>
XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="URI">
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="link">
<xref itemid="{substring-after(@xlink:href, '#')}" wpid="{substring-before(substring-after(@xlink:href, '#'),'-')}"/>
</xsl:template>
</xsl:stylesheet>
Выход
<root xmlns:xlink="URI">
<xref itemid="S50005-TOOL1" wpid="S50005" />
<xref itemid="S50018-TOOL15" wpid="S50018" />
</root>