我需要“如何解析xml文件及其xsd元素的值”解决方案?
作为我的Web服务方法调用的结果,我将获得一个包含xsd作为Java String的Java对象。该xsd包含许多xsd:elements。我需要获取一个名为“ AccountName”的元素,其中包含一个AccountNames列表。我需要在这里使用Java代码来获取所有内容并将其存储到一个列表中。这里是:
metadataXsd ----------->
<xsd:schema xmlns:xsd="http://www.w3.org /2001/XMLSchema">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element id="md_37EE5DE8-996B-0371-A119-61B77FE6ABCF" name="Category" minOccurs="0" maxOccurs="1">
<xsd:annotation>
<xsd:documentation/>
<xsd:appinfo>
<label>Category</label>
<key>Category</key>
<searchable>true</searchable>
<timeControl>false</timeControl>
<description>Specify categories where the media content should be published</description>
</xsd:appinfo>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="listType">
<xsd:enumeration value="Industries & Solutions"/>
<xsd:enumeration value="Industries & Solutions - Solutions Topics"/>
<xsd:enumeration value="Industries & Solutions - Industry Solutions"/>
<xsd:enumeration value="Industries & Solutions - Business Partners and Alliances"/>
<xsd:enumeration value="Services"/>
<xsd:enumeration value="Services - Business Services"/>
<xsd:enumeration value="Services - IT Services"/>
<xsd:enumeration value="Services - Outsourcing Services"/>
<xsd:enumeration value="Services - Training"/>
<xsd:enumeration value="Services - Additional Services"/>
<xsd:enumeration value="Products"/>
<xsd:enumeration value="Products - Software"/>
<xsd:enumeration value="Products - Systems"/>
<xsd:enumeration value="Products - Storage"/>
<xsd:enumeration value="Products - Additional Products"/>
<xsd:enumeration value="Support & downloads"/>
<xsd:enumeration value="Support & downloads - Knowledge Center"/>
<xsd:enumeration value="Support & downloads - Knowledge Center - Education Assistant"/>
<xsd:enumeration value="Support & downloads - Technical Support"/>
<xsd:enumeration value="Support & downloads - Developer Support"/>
<xsd:enumeration value="Support & downloads - Supplier Support"/>
<xsd:enumeration value="Support & downloads - Former Products"/>
<xsd:enumeration value="Support & downloads - Downloads"/>
<xsd:enumeration value="My"/>
<xsd:enumeration value="Interests"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element id="md_ACECFC0E-1F3B-8233-17B3-AEB96AF9D030" name="AccountName" minOccurs="0" maxOccurs="1">
<xsd:annotation>
<xsd:documentation></xsd:documentation>
<xsd:appinfo>
<label>Account Name</label>
<key>Account Name</key>
<searchable>true</searchable>
<timeControl>false</timeControl>
<description>Specify the account that owns the media content</description>
</xsd:appinfo>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="listType">
<xsd:enumeration value="Analytics Business Unit Client Success Sales Eminence"/>
<xsd:enumeration value="Digital"/>
<xsd:enumeration value="Enterprise Media Team Enablement"/>
<xsd:enumeration value="Enterprise Content and eSupport Services"/>
<xsd:enumeration value="Global Delivery Center"/>
<xsd:enumeration value="Digital Video Services New York"/>
<xsd:enumeration value="Enterprise Social Solutions"/>
<xsd:enumeration value="GBS Knowledge"/>
<xsd:enumeration value="GPS Technology"/>
<xsd:enumeration value="Global Private Digital Commercde"/>
<xsd:enumeration value="Center"/>
<xsd:enumeration value="mix"/>
<xsd:enumeration value="Essentials"/>
<xsd:enumeration value="References"/>
<xsd:enumeration value="Learning Services"/>
<xsd:enumeration value="works"/>
<xsd:enumeration value="Programs & Operations"/>
<xsd:enumeration value="IBM Digital – CHQ Marketing"/>
<xsd:enumeration value="Assistant"/>
<xsd:enumeration value="Content Catalog"/>
<xsd:enumeration value="Center"/>
<xsd:enumeration value="books"/>
<xsd:enumeration value="ser"/>
<xsd:enumeration value="Marketing and Communications"/>
<xsd:enumeration value="Middleware Client Success"/>
<xsd:enumeration value="PW"/>
<xsd:enumeration value="Enablement"/>
<xsd:enumeration value="Sales"/>
<xsd:enumeration value="Systems Unit"/>
<xsd:enumeration value="Technical"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:schema>
从上面我需要仅提取AccountName元素并将其所有值存储为一个列表并进行进一步处理。
我尝试了下面的代码,将String转换为xml。
metadataXsd = metadataProfile.xsd;
if(metadataXsd != null) {
System.out.println("metadataXsd ----------->"+metadataXsd);
finalXmlDoc = stringToDom(metadataXsd);
System.out.println("finalXmlDoc ----------->"+finalXmlDoc);
}
}
public static Document stringToDom(String xmlSource) throws SAXException, ParserConfigurationException, IOException, TransformerException{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try
{
builder = factory.newDocumentBuilder();
Document doc = builder.parse( new InputSource(new StringReader(xmlSource)));
TransformerFactory tranFactory = TransformerFactory.newInstance();
Transformer aTransformer = tranFactory.newTransformer();
Source src = new DOMSource( doc );
Result dest = new StreamResult( new File( "C:/AccountNames.xml" ) );
System.out.println("Destination xml -------->"+dest);
aTransformer.transform( src, dest );
Document doc1 = builder.parse (new File("C:/AccountNames.xml"));
NodeList list = doc1.getElementsByTagName("xsd:element");
for(int i = 0 ; i < list.getLength(); i++)
{
Element first = (Element)list.item(i);
}
return doc;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
现在,我需要获取所有值作为Java列表。请帮我解决这个问题。
最佳答案
这是我的问题的解决方案。希望这对某人有帮助。
public static Document stringToDom(String xmlSource) throws SAXException, ParserConfigurationException, IOException, TransformerException{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
NodeList nodeList = null;
List<String> accountNamesList = new ArrayList<String>();
try
{
builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xmlSource)));
TransformerFactory tranFactory = TransformerFactory.newInstance();
Transformer aTransformer = tranFactory.newTransformer();
Source src = new DOMSource(doc);
Result dest = new StreamResult(new File("C:/AccountNames.xml" ) );
aTransformer.transform( src, dest );
Document doc1 = builder.parse (new File("C:/AccountNames.xml"));
NodeList list = doc1.getElementsByTagName("xsd:element");
for(int i = 0 ; i < list.getLength(); i++)
{
Element first = (Element)list.item(i);
if(first.hasAttributes()) {
String attrname = first.getAttribute("name");
if(attrname.equalsIgnoreCase("AccountName")) {
NodeList list1 = first.getElementsByTagName("xsd:enumeration");
for(int j=0;j<list1.getLength();j++) {
Element sec = (Element)list1.item(j);
if(sec.hasAttributes()) {
String attr = sec.getAttribute("value");
System.out.println(attr);
accountNamesList.add(attr);
}
}
}
}
}
System.out.println("accountNamesList.size()"+accountNamesList.size());
return null;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
谢谢,
拉吉亚