从输入文件中提取特定元素,并使用StAX将它们写入输出文件

时间:2015-05-04 20:11:41

标签: xml tags extract elements stax

假设我有下一个XML:

<?xml version="1.0" encoding="UTF-8"?>
<orders>
     <order created='2002-02-12T11:10:30.000' ID='1233'>
          <fruit>
               <description>Red apples</description>
               <price currency="USD">13.25</price>
               <gardener>John</gardener>
          <fruit>
          <fruit>
               <description>Bananas</description>
               <price currency="USD">11.19</price>
               <gardener>Ana</gardener>
          <fruit>
          <fruit>
               <description>Golden apples</description>
               <price currency="USD">16.46</price>
               <gardener>John</gardener>
          <fruit>
     </order>
     <order created='2002-02-13T15:32:30.000' ID='1234'>
          <fruit>
               <description>Oranges</description>
               <price currency="USD">10.99</price>
               <gardener>Ana</gardener>
          <fruit>
          <fruit>
               <description>Kiwi</description>
               <price currency="USD">10.39</price>
               <gardener>Helen</gardener>
          <fruit>
     </order>
</orders>

我需要为每个不同的成绩单编写一个XML文件。 (约翰,安娜,海伦)。 xml文件的名称应该类似gradener_name ##,其中##是“order”元素(例如Ana12)中ID属性值的前2位数。 防爆。 Ana12.xml

<?xml version="1.0" encoding="UTF-8"?>
<fruits>
     <fruit>
          <description>Bananas</description>
          <price currency="USD">11.19</price>
          <gardener>Ana</gardener>
     <fruit>
     <fruit>
          <description>Oranges</description>
          <price currency="USD">10.99</price>
          <gardener>Ana</gardener>
     <fruit>
</fruits>

这里,水果按价格排序。第一个水果是价格较高的水果。

1 个答案:

答案 0 :(得分:0)

您需要分两步完成:

  1. 例如,使用protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved)XMLInputFactory读取XML。在阅读XML时,您可以创建自己的模型表示(由您创建gardener_name ##等效模型)
  2. 在此XML阅读之后,您必须拥有3个Gardener对象或您创建的任何对象的集合,创建新的XML文件并使用XMLStreamReaderXMLOutputFactory生成所需的内容。
  3. 拥有自己的模型可以轻松按价格对水果进行分类。我不认为在不创建自定义中间java模型的情况下尝试这样做是一种很好的方法。

    编辑: 作为对其他问题的补充评论:不要同时尝试读写。你的逻辑需要java对象表示,只有通过对事件作出反应才能做你想做的事。