我不知道如何解释我的情况,我可以在下面举例说明。 我有一个用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();
}
}
}
答案 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());
}
}