0

原始数据:

<?xml version="1.0"?>
<CascadedExtractFileData>
<Country>
<IsoCountryCode>IN</IsoCo
untryCode>
<Provider>
<ItuCode>CASCADED_PROV</ItuCode>
<AccessInterconnect>
<CASCADE
D_INTERCONNECT_ID>50</CASCADED_INTERCONNECT_ID>
<TailTechnology>
<CASCADED_ACCESS_
METHOD_ID>1</CASCADED_ACCESS_METHOD_ID>
</TailTec
hnology></Access
Interconnect></
Provider><
/Country>
</C
ascad
edExtractFileData>

需要像:

<?xml version="1.0"?>
<CascadedExtractFileData>
<Country>
<IsoCountryCode>
IN
</IsoCountryCode>
<Provider>
<ItuCode>
CASCADED_PROV
</ItuCode>
<AccessInterconnect>
<CASCADED_INTERCONNECT_ID>
50
</CASCADED_INTERCONNECT_ID>
<TailTechnology>
<CASCADED_ACCESS_METHOD_ID>
1
</CASCADED_ACCESS_METHOD_ID>
</TailTechnology>
</AccessInterconnect>
</Provider>
</Country>
</CascadedExtractFileData>

我需要每个标签<></>一个新的行和数据之间的数据,<>IN</>例如IN也在一个新的行上。我需要一个结构完美的 XML 格式。

我需要使用 Unix 工具的解决方案grepsedawk.

4

2 回答 2

2

此行将修复无效 xml 文件中的问题:

awk '{s=s $0}END{gsub(/></,">\n<",s);s=gensub(/>([^ \n>]*)</,">\n\\1\n<","g",s);print s}' file

输出:

<?xml version="1.0"?>
<CascadedExtractFileData>
<Country>
<IsoCountryCode>
IN
</IsoCountryCode>
<Provider>
<ItuCode>
CASCADED_PROV
</ItuCode>
<AccessInterconnect>
<CASCADED_INTERCONNECT_ID>
50
</CASCADED_INTERCONNECT_ID>
<TailTechnology>
<CASCADED_ACCESS_METHOD_ID>
1
</CASCADED_ACCESS_METHOD_ID>
</TailTechnology>
</AccessInterconnect>
</Provider>
</country>
</cascadedExtractFileData>
于 2013-03-23T17:37:59.733 回答
-1

以下命令删除换行符(以修复 XML 标记),然后将结果通过管道传输到可以格式化结果的 xmllint:

cat data.xml | tr -d '\n' | xmllint -format -

以下输出:

<?xml version="1.0"?>
<CascadedExtractFileData>
  <Country>
    <IsoCountryCode>IN</IsoCountryCode>
    <Provider>
      <ItuCode>CASCADED_PROV</ItuCode>
      <AccessInterconnect>
        <CASCADED_INTERCONNECT_ID>50</CASCADED_INTERCONNECT_ID>
        <TailTechnology>
          <CASCADED_ACCESS_METHOD_ID>1</CASCADED_ACCESS_METHOD_ID>
        </TailTechnology>
      </AccessInterconnect>
    </Provider>
  </Country>
</CascadedExtractFileData>

更新

我的结果文件的格式与您的要求不同,但是我会提交更清晰的格式。

从命令行操作 XML 时,xmllint 程序是一个非常有用的工具。除了能够验证和格式化 XML 之外,它还可以用于使用xpath进行搜索。

于 2013-03-23T23:07:33.913 回答