Java 从UML模型生成的xml中获取属性值
我有一个这样的xml字符串,我想得到“Element/xmi:type/name”的属性值。这意味着我只想在每个元素的循环中检索类型为-activity的元素的名称。我该怎么做?我正在使用javax.xml.parsers库Java 从UML模型生成的xml中获取属性值,java,xml,parsing,Java,Xml,Parsing,我有一个这样的xml字符串,我想得到“Element/xmi:type/name”的属性值。这意味着我只想在每个元素的循环中检索类型为-activity的元素的名称。我该怎么做?我正在使用javax.xml.parsers库 <element xmi:idref="EAID_53685791_7F62_48a2_8BE8_DB7513AC776A" xmi:type="uml:Activity" name="Return error value" scope="public">
<element xmi:idref="EAID_53685791_7F62_48a2_8BE8_DB7513AC776A" xmi:type="uml:Activity" name="Return error value" scope="public">
<model package="EAPK_263A2FE8_8346_4d1e_A851_39B9D573143D" tpos="0" ea_localid="98" ea_eleType="element"/>
<properties isSpecification="false" sType="Activity" nType="0" scope="public" isAbstract="false"/>
<project author="shiva999" version="1.0" phase="1.0" created="2016-08-16 09:44:25" modified="2016-08-16 10:13:51" complexity="1" status="Proposed"/>
<code gentype="<none>"/>
<style appearance="BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=1;HSwimLanes=1;BorderStyle=0;"/>
<modelDocument/>
<tags/>
<xrefs/>
<extendedProperties tagged="0" package_name="Activity Model"/>
<links>
<ControlFlow xmi:id="EAID_873CF8C4_0192_4099_8F66_6B36FA760AB6" start="EAID_53685791_7F62_48a2_8BE8_DB7513AC776A" end="EAID_D2EB427B_3AFD_4700_BD72_13B36684E595"/>
<ControlFlow xmi:id="EAID_2FECE2AE_6CA0_48a4_82AE_D743D257F37C" start="EAID_0D85B784_4393_429e_9BA1_7983BD7891CA" end="EAID_53685791_7F62_48a2_8BE8_DB7513AC776A"/>
</links>
</element>
下面是我写的代码。获取错误为“类型NodeLis的方法类型(int)未定义”。我是xml解析新手,正在参考在线教程
public class DomXMLParser {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(new File("activity.xml"));
NodeList nodeList = document.getElementsByTagName("Type");
for(int x=0,size= nodeList.getLength(); x<size; x++) {
System.out.println(nodeList.type(x).getAttributes().getNamedItem("name").getNodeValue());
}
}
公共类DomXMLParser{
公共静态void main(字符串[]args)引发异常{
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
documentdocument=db.parse(新文件(“activity.xml”);
NodeList NodeList=document.getElementsByTagName(“类型”);
对于(int x=0,size=nodeList.getLength();x,下面是使用XPath的代码。没有得到预期的结果。我有许多这样的活动节点和这些节点的转换边。因此,我需要将它们存储为列表并创建层次图
public class DomXMLParser {
public static void main(String[] args) throws ParserConfigurationException, SAXException,
IOException, XPathExpressionException {
//DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
File fXmlFile = new File("C:/Projekte/activity.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dbFactory.setNamespaceAware(true);
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
javax.xml.xpath.XPathExpression expr
= xpath.compile("//xmi:XMI[xmi:type ='uml:Activity']/name/text()");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getNodeValue());
}
公共类DomXMLParser{
公共静态void main(字符串[]args)抛出ParserConfiguration异常、SAXException、,
IOException,XPathExpressionException{
//DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
试一试{
File fXmlFile=新文件(“C:/Projekte/activity.xml”);
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
dbFactory.setNamespaceAware(true);
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
documentdoc=dBuilder.parse(fXmlFile);
XPathFactory=XPathFactory.newInstance();
XPath=factory.newXPath();
javax.xml.xpath.xpath表达式
=xpath.compile(“//xmi:xmi[xmi:type='uml:Activity']/name/text()”;
Object result=expr.evaluate(doc,XPathConstants.NODESET);
节点列表节点=(节点列表)结果;
对于(int i=0;i
Hi,我会使用XPath:支持是本机的,只需设置一个读卡器并将其传递给正确的路径即可。@BugProtectionActivist我已经发布了我使用的XPath。没有预期的输出。请帮助Hi,我需要一个完整的XML(带有标题)来测试它,但我相信正确的XPath看起来像//元素[@xmi:type='uml:Activity']/name/text()