-1

Может ли кто-нибудь помочь мне, предложив пакетный скрипт, чтобы найти строку 'utf-16' в нескольких файлах XML в каталоге и заменить ее на 'utf-8'. Без использования найти и заменить инструменты. Замена должна быть сделана в самом существующем файле.

1 ответ1

1

Используйте любой XSLT-процессор. Например msxsl.

Утилита преобразования командной строки

MSXML 4.0 с пакетом обновления 2 (Microsoft XML Core Services)

zero.xsl - преобразование таблицы стилей test.xml в test2.xml

<xsl:output method="xml" encoding="UTF-8" /> конвертировать xml в UTF-8.

Zeroxml test.xml

Zeroxml.cmd:

@echo off
@set name=%1
msxsl.exe %name% zero.xsl -o %name:~0,-4%2.xml

zero.xsl:

<!-- The Identity Transformation -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<!-- <xsl:output method="html" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/> -->


<xsl:output method="html" media-type="application/vnd.ms-excel" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>

<!-- <xsl:output omit-xml-declaration="no" indent="yes" encoding="UTF-8" method="html" />  -->
<!-- <xsl:output method="xml" media-type="application/vnd.ms-excel" encoding="UTF-8" indent="yes"     omit-xml-declaration="no"/>  -->
<!-- <xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>  -->
<!-- <xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/> -->

  <!-- Whenever you match any node or any attribute -->
  <xsl:template match="node()|@*">
    <!-- Copy the current node -->
    <xsl:copy>
      <!-- Including any attributes it has and any child nodes -->
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

 <xsl:template match="*|@*|comment()|
                          processing-instruction()|text()">
         <xsl:copy>
             <xsl:apply-templates select="*|@*|comment()|
                                      processing-instruction()|text()"/>
         </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

Way2, преобразуйте UTF-16 в командную строку UTF-8:

Unicode - порядок байтов в младшем порядке в формате UTF-16.

powershell gc test.xml -encoding Unicode^|sc testUTF8.xml -encoding UTF8

BigEndianUnicode - порядок байтов с прямым порядком байтов в формате UTF-16.

powershell gc test.xml -encoding BigEndianUnicode^|sc testUTF8.xml -encoding UTF8

Конвертировать все xml-файлы UTF-16 в каталоге и подкаталоге SourceDirXML в UTF-8

powershell $in='C:\SourceDirXML';$out='C:\OutputUTF8XML\';ls -Fo -r $in -Fi *.xml^|%{(gc $_.FullName -encoding Unicode^|sc ($out+$_.Name) -encoding UTF8)}

Найдите и замените строку в нескольких XML-файлах (в каталоге) на Windows CMD:

powershell $in='C:\SourceDirXML';$out='C:\OutputUTF8XML\';ls -Fo -r $in -Fi *.xml^|%{(gc $_.FullName^|%{$_ -replace 'oldstring','newstring'}^|sc ($out+$_.Name) -encoding UTF8)}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .