Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取元素ID中的属性_Java_Xml_Xml Parsing_Sax - Fatal编程技术网

Java 如何获取元素ID中的属性

Java 如何获取元素ID中的属性,java,xml,xml-parsing,sax,Java,Xml,Xml Parsing,Sax,我有以下XML数据。我希望获得仅与该位置相关的lat和lng值,而不是西南部。我怎样才能做到这一点,而不必阅读《西南》 `<geometry> <location> <lat>51.5739894</lat> <lng>-0.1499698</lng> </location> <southwest> <lat>51.5727314</l

我有以下XML数据。我希望获得仅与该位置相关的lat和lng值,而不是西南部。我怎样才能做到这一点,而不必阅读《西南》

 `<geometry>
   <location>
    <lat>51.5739894</lat>
    <lng>-0.1499698</lng>
   </location>
    <southwest>
     <lat>51.5727314</lat>
     <lng>-0.1511809</lng>
    </southwest>
</geometry>`

对于这种特殊情况,如果我是您,我将使用
org.json
parse as JSONObject来查询每个节点

JSONObject jsonObject = XML.toJSONObject(xml).getJSONObject("geometry").getJSONObject("location");
String lat = jsonObject.getString("lat");
String lng = jsonObject.getString("lng");

对于这种特殊情况,如果我是您,我将使用
org.json
parse as JSONObject来查询每个节点

JSONObject jsonObject = XML.toJSONObject(xml).getJSONObject("geometry").getJSONObject("location");
String lat = jsonObject.getString("lat");
String lng = jsonObject.getString("lng");

如果xml不是很大,那么使用
XPathFactory
的方法也可以。否则,使用SAX解析器。但是在编写SAX解析器时,您需要进行额外的处理,特别是当您遇到诸如我只需要
位置
lat
值这样的条件时

我将使用xpath方法,使用非常简单,无需使用第三方。这可以通过java.xml完成*

代码为:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse( new File( ".//input.xml" ) );

XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xpath = xPathFactory.newXPath();

XPathExpression latExpr = xpath.compile( "//location/lat" );
XPathExpression lngExpr = xpath.compile( "//location/lng" );

Object exprEval = latExpr.evaluate( doc, XPathConstants.NUMBER );
if ( exprEval != null )
{
    System.out.println( "Location's lat value is :" + exprEval );
}
exprEval = lngExpr.evaluate( doc, XPathConstants.NUMBER );
if ( exprEval != null )  
{
   System.out.println( "Location's lng value is :" + exprEval );
}
input.xml
包含您的xml。 它使用xpath:
//location/lat
,这意味着获取父项为
location
lat
的值。 并将xpath计算为一个
数字

输出为:

Location's lat value is :51.5739894
Location's lng value is :-0.1499698

如果xml不是很大,那么使用
XPathFactory
的方法也可以。否则,使用SAX解析器。但是在编写SAX解析器时,您需要进行额外的处理,特别是当您遇到诸如我只需要
位置
lat
值这样的条件时

我将使用xpath方法,使用非常简单,无需使用第三方。这可以通过java.xml完成*

代码为:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse( new File( ".//input.xml" ) );

XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xpath = xPathFactory.newXPath();

XPathExpression latExpr = xpath.compile( "//location/lat" );
XPathExpression lngExpr = xpath.compile( "//location/lng" );

Object exprEval = latExpr.evaluate( doc, XPathConstants.NUMBER );
if ( exprEval != null )
{
    System.out.println( "Location's lat value is :" + exprEval );
}
exprEval = lngExpr.evaluate( doc, XPathConstants.NUMBER );
if ( exprEval != null )  
{
   System.out.println( "Location's lng value is :" + exprEval );
}
input.xml
包含您的xml。 它使用xpath:
//location/lat
,这意味着获取父项为
location
lat
的值。 并将xpath计算为一个
数字

输出为:

Location's lat value is :51.5739894
Location's lng value is :-0.1499698

谢谢,我没有使用Json解析器,但我会尝试一下。谢谢,我没有使用Json解析器,但我会尝试一下。谢谢,这是一个非常有趣的例子answer@AnthonyJ如果你发现答案是有用的,考虑一下投票。谢谢。谢谢,这是一个非常有趣的节目answer@AnthonyJ如果你发现答案是有用的,考虑一下投票。谢谢