【问题标题】:Xml parsing and writing to another xml file in Javaxml解析并写入Java中的另一个xml文件
【发布时间】:2015-05-14 07:36:35
【问题描述】:

如何解析xml文件,以便将相同的节点一个接一个地多次写入另一个文件? 例如:

1.Xml file to be parsed:
 <?xml version="1.0" encoding="UTF-8"?>
  <ALL>
    <VER>7.0</VER>
    <NATIONALITY>FIN</NATIONALITY>
    <DATA>
    <USER>ED</USER>
    <PLZ>XXX</PLZ>
    <BEGIN>2015-05-16</BEGIN>
    <CURRENCY>90</CURRENCY>
    <MARKE>KIA</MARKE>
    <DATA>
  </ALL>

2.结果,我想这样做,多次保存在另一个xml文件中:

<?xml version="1.0" encoding="UTF-8"?>
<ALL>
  <VER>7.0</VER>
   <NATIONALITY>FIN</NATIONALITY>
    <DATA>
    <USER>ED</USER>
    <PLZ>XXX</PLZ>
    <BEGIN>2015-05-16</BEGIN>
    <CURRENCY>90</CURRENCY>
   <MARKE>KIA</MARKE>
  <DATA>
 </ALL> 

<ALL>
 <VER>7.0</VER>
  <NATIONALITY>FIN</NATIONALITY>
  <DATA>
    <USER>ED</USER>
    <PLZ>XXX</PLZ>
    <BEGIN>2015-05-16</BEGIN>
    <CURRENCY>90</CURRENCY>
    <MARKE>KIA</MARKE>
    <DATA>
  </ALL>
  ...

这是我之前的问题:Copy nodes in the same output xml file -java

【问题讨论】:

标签: java xml xml-parsing


【解决方案1】:

第二个例子不是 XML 文件。

添加一个外部标签并 appendChild 到根目录并保存。 该文件将保持有效。

<?xml version="1.0" encoding="UTF-8"?>
  <ALLs>
    <ALL>
    <VER>7.0</VER>
    <NATIONALITY>FIN</NATIONALITY>
    <DATA>
    <USER>ED</USER>
    <PLZ>XXX</PLZ>
    <BEGIN>2015-05-16</BEGIN>
    <CURRENCY>90</CURRENCY>
    <MARKE>KIA</MARKE>
    <DATA>
  </ALL>
  </ALLs>

您可以使用随机访问文件,跳到末尾,在写入新的 XML sn-p 之前定位并再次写入 ALL。这应该很快。

另一个对流很有用的选项,总是写入 XML 标头。

在这种情况下,您必须逐个解析,注意您传递的用于解析的 InputStream 不会关闭 inputStream(使用关闭创建您自己的子类,实际上不会关闭文件,并且外部关闭;否则 XML 解析器将关闭文件)。

<?xml version="1.0" encoding="UTF-8"?>
<ALL>
  <VER>7.0</VER>
   <NATIONALITY>FIN</NATIONALITY>
    <DATA>
    <USER>ED</USER>
    <PLZ>XXX</PLZ>
    <BEGIN>2015-05-16</BEGIN>
    <CURRENCY>90</CURRENCY>
   <MARKE>KIA</MARKE>
  <DATA>
 </ALL> 

<?xml version="1.0" encoding="UTF-8"?>
<ALL>
 <VER>7.0</VER>
  <NATIONALITY>FIN</NATIONALITY>
  <DATA>
    <USER>ED</USER>
    <PLZ>XXX</PLZ>
    <BEGIN>2015-05-16</BEGIN>
    <CURRENCY>90</CURRENCY>
    <MARKE>KIA</MARKE>
    <DATA>
  </ALL>

另一个使用选项,例如JSON;将您的 XML 转换为 JSON 并附加到文件中;阅读时,逐行阅读并根据需要将JSON转换为XML

【讨论】:

    【解决方案2】:

    由于您的输出不包含单个根标记,因此它不是有效的 XML。听起来您只想输出文件的第一行,然后将后续行重复任意次数。 如果是这种情况,您并不真正关心输入文件是[有效] XML 的事实。您可以尝试以下方法:

    final int cnt = 2;
    Files.write(
        Paths.get("out.txt"),
        new AbstractList<String>() {
            private final List<String> mStrs = Files.readAllLines(Paths.get("in.xml"));
    
            public int size() {return 1 + (mStrs.size() - 1) * cnt;}
    
            public String get(int pIdx) {
                return
                 pIdx == 0 ?
                 mStrs.get(0) :
                 mStrs.get((pIdx - 1) % (mStrs.size() - 1) + 1);
            }
        }
    );
    

    请注意,此解决方案假定存在输入 XML 标头。

    【讨论】:

    • 这就是我要找的。谢谢你帮助我。
    猜你喜欢
    • 2011-07-21
    • 2013-12-29
    • 2015-05-24
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多