gpt4 book ai didi

java - 如何使用java解析xsd字符串以获取其元素?

转载 作者:行者123 更新时间:2023-11-30 07:38:30 27 4
gpt4 key购买 nike

我需要“如何解析 xml 文件及其 xsd 元素的值”的解决方案?

作为我的一个 Web 服务方法调用的结果,我将获得一个 Java 对象,其中包含一个 xsd 作为 Java 字符串。此 xsd 包含许多 xsd:element。我需要获取名为“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 &amp; Solutions"/>
<xsd:enumeration value="Industries &amp; Solutions - Solutions Topics"/>
<xsd:enumeration value="Industries &amp; Solutions - Industry Solutions"/>
<xsd:enumeration value="Industries &amp; 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 &amp; downloads"/>
<xsd:enumeration value="Support &amp; downloads - Knowledge Center"/>
<xsd:enumeration value="Support &amp; downloads - Knowledge Center - Education Assistant"/>
<xsd:enumeration value="Support &amp; downloads - Technical Support"/>
<xsd:enumeration value="Support &amp; downloads - Developer Support"/>
<xsd:enumeration value="Support &amp; downloads - Supplier Support"/>
<xsd:enumeration value="Support &amp; downloads - Former Products"/>
<xsd:enumeration value="Support &amp; 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 &amp; 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 元素并将其所有值存储为一个列表并进行进一步处理。

我尝试了下面的代码,将字符串转换为 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;
}

谢谢,拉吉亚

关于java - 如何使用java解析xsd字符串以获取其元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35033771/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com