读取XML标签从内部标签获取值

时间:2017-01-06 04:26:59

标签: java xml parsing

我不知道如何解释我的情况,我可以在下面举例说明。 我有一个用Java读取的XML文件,如下所示:

<Author AffiliationIDS="Aff1">
    <AuthorName DisplayOrder="Western">
       <GivenName>Wei</GivenName>
       <GivenName>Long</GivenName>
       <FamilyName>
       <Value>Tan</Value>
       </FamilyName>
    </AuthorName>
</Author>

正如您可以看到<FamilyName>标记一样,<FamilyName>标记内包含一个Value标记。这是因为在xsd中它将元素称为maxOccurs="unbounded",这意味着该元素标记中可以包含多个值。我应该如何修改代码,以便它可以在<FamilyName>标记中读取并获取Value标记元素,无论Value出现多少次?

示例:

           <FamilyName>
           <Value>Sarah</Value>
           <Value>Johnson</Value>
           </FamilyName>

代码看起来像这样。

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;

public class ReadXMLFile {

  public static void main(String argv[]) {

        try {

        File fXmlFile = new File("/fileaddress/test-1.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);


        doc.getDocumentElement().normalize();

        System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

        NodeList nList = doc.getElementsByTagName("AuthorName");

        System.out.println("----------------------------");

        for (int temp = 0; temp < nList.getLength(); temp++) {

            Node nNode = nList.item(temp);

            System.out.println("\nCurrent Element :" + nNode.getNodeName());

            if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                Element eElement = (Element) nNode;

                System.out.println("Given Name : " + eElement.getElementsByTagName("GivenName").item(0).getTextContent());
                System.out.println("Family Name : " + eElement.getElementsByTagName("FamilyName").item(0).getTextContent());

            }
        }
        } catch (Exception e) {
        e.printStackTrace();
        }
      }

}

1 个答案:

答案 0 :(得分:0)

通过getElementsByTagName(“FamilyName”)。item(0)获取FamilyName节点并循环其子节点(.getChildNodes())并获取textNode的值

或者,

如果您确定除了FamilyName内部以外的任何其他地方都不会出现值标记,您甚至可以获取ElementsByTagName(“Value”)

这是代码示例

NodeList children = doc.getElementsByTagName("FamilyName").item(0).getChildNodes();

for(int i=0;i<children.getLength();i++) {
      if(children.item(i).getNodeType()== Node.ELEMENT_NODE) {
            Element child = (Element)children.item(i);
            System.out.println(child.getTextContent());
       }
}