Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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 使用XOM解析XML时,子元素为Null_Java_Xml Parsing_Nullpointerexception_Xom - Fatal编程技术网

Java 使用XOM解析XML时,子元素为Null

Java 使用XOM解析XML时,子元素为Null,java,xml-parsing,nullpointerexception,xom,Java,Xml Parsing,Nullpointerexception,Xom,我正在使用XOM解析xml文件,但在按字符串名称获取元素时遇到了一个问题。我可以通过迭代getChild(x)wherex=0:ChildCount来访问每个元素,但是在软件中有一个内置函数来完成这项任务,我不得不绕开它似乎很愚蠢。为什么我会得到NPE?请参见下面的示例…我100%确定父对象包含一个与我正在搜索的确切名称相同的子对象。我能做些什么来解决这个问题 FileInputStream xmlFile = new FileInputStream("temp.xml"); Builder b

我正在使用XOM解析xml文件,但在按字符串名称获取
元素时遇到了一个问题。我可以通过迭代
getChild(x)
where
x=0:ChildCount
来访问每个元素,但是在软件中有一个内置函数来完成这项任务,我不得不绕开它似乎很愚蠢。为什么我会得到NPE?请参见下面的示例…我100%确定父对象包含一个与我正在搜索的确切名称相同的子对象。我能做些什么来解决这个问题

FileInputStream xmlFile = new FileInputStream("temp.xml");
Builder builder = new Builder();
Document doc = builder.build(xmlFile);
Element root = doc.getRootElement();

System.out.println(((Element)root.getChild(1)).getLocalName()); //--> prints "player"
Element player = root.getFirstChildElement(((Element)root.getChild(1)).getLocalName()); //--> null
System.out.println(player); //--> prints "null"
Element player_stats = player.getFirstChildElement("player_stats"); //--> NPE
temp.xml

<?xml version="1.0" encoding="UTF-8"?>
<fantasy_content xml:lang="en-US"
yahoo:uri="http://fantasysports.yahooapis.com/fantasy/v2/player/nfl.p.7206/stats;type=week;week=2"
time="34.230947494507ms" copyright="Data provided by Yahoo! and STATS, LLC"
refresh_rate="31" xmlns:yahoo="http://www.yahooapis.com/v1/base.rng"
xmlns="http://fantasysports.yahooapis.com/fantasy/v2/base.rng">
<player>
    <player_key>331.p.7206</player_key>
    <player_id>7206</player_id>
    <name>
        <full>Heath Miller</full>
        <first>Heath</first>
        <last>Miller</last>
        <ascii_first>Heath</ascii_first>
        <ascii_last>Miller</ascii_last>
    </name>
    <injury_note>not injury related</injury_note>
    <editorial_player_key>nfl.p.7206</editorial_player_key>
    <editorial_team_key>nfl.t.23</editorial_team_key>
    <editorial_team_full_name>Pittsburgh Steelers</editorial_team_full_name>
    <editorial_team_abbr>Pit</editorial_team_abbr>
    <bye_weeks>
        <week>12</week>
    </bye_weeks>
    <uniform_number>83</uniform_number>
    <display_position>TE</display_position>
    <is_undroppable>0</is_undroppable>
    <position_type>O</position_type>
    <eligible_positions>
        <position>TE</position>
    </eligible_positions>
    <has_player_notes>1</has_player_notes>
    <player_stats>
        <coverage_type>week</coverage_type>
        <week>2</week>
        <stats>
            <stat>
                <stat_id>0</stat_id>
                <value>1</value>
            </stat>
            <stat>
                <stat_id>1</stat_id>
                <value>0</value>
            </stat>
            <stat>
                <stat_id>2</stat_id>
                <value>0</value>
            </stat>
            <stat>
                <stat_id>3</stat_id>
                <value>0</value>
            </stat>

            ...

            <stat>
                <stat_id>81</stat_id>
                <value>0</value>
            </stat>
        </stats>
    </player_stats>
</player>
</fantasy_content>

331.p.7206
7206
希思米勒
荒地
米勒
荒地
米勒
与受伤无关
nfl.p.7206
nfl.t.23
匹兹堡钢人队
矿井
12
83
TE
0
O
TE
1.
周
2.
0
1.
1.
0
2.
0
3.
0
...
81
0

谢谢

在发布问题后不久,终于找到了答案。为什么这似乎总是发生

我需要的是名称空间参数。我没有硬编码它,而是检索根节点的名称空间,并假设其子节点的名称空间相同:

String nameSpace = root.getNamespaceURI();
// getChildElements
Element player = root.getFirstChildElement("player",nameSpace);
Element player_stats = player.getFirstChildElement("player_stats",nameSpace);
似乎XOM应该足够健壮来处理这个问题,但我认为它不是