Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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 如何在不硬编码attr name的情况下使用vtd xml解析xml?_Java_Xml_Parsing_Vtd Xml - Fatal编程技术网

Java 如何在不硬编码attr name的情况下使用vtd xml解析xml?

Java 如何在不硬编码attr name的情况下使用vtd xml解析xml?,java,xml,parsing,vtd-xml,Java,Xml,Parsing,Vtd Xml,这是我的示例XML文件,实际上超过2gb。使用vtd xml,我取得了以下成就: 当前代码: PVAL|||298374234 PVAL|||1231 PVAL|||brown PVAL|||medium PVAL|||7 PVAL|||solid PVAL|||brown Sku_ID|||298374234 LotNum|||1231 COLOR|||brown WIDTH|||medium SIZE|||7 Pattern|||solid Color Family|||brown &l

这是我的示例XML文件,实际上超过2gb。使用vtd xml,我取得了以下成就:

当前代码:

PVAL|||298374234
PVAL|||1231
PVAL|||brown
PVAL|||medium
PVAL|||7
PVAL|||solid
PVAL|||brown
Sku_ID|||298374234
LotNum|||1231
COLOR|||brown
WIDTH|||medium
SIZE|||7
Pattern|||solid
Color Family|||brown
<?xml version="1.0" encoding="UTF-8" ?>
<RECORDS>
  <RECORD>
    <PROP NAME="Sku_ID">
      <PVAL>298374234</PVAL>
    </PROP>
    <PROP NAME="LotNum">
      <PVAL>1231</PVAL>
    </PROP>
    <PROP NAME="COLOR">
      <PVAL>brown</PVAL>
    </PROP>
    <PROP NAME="WIDTH">
      <PVAL>medium</PVAL>
    </PROP>
    <PROP NAME="SIZE">
      <PVAL>7</PVAL>
    </PROP>
    <PROP NAME="Pattern">
      <PVAL>solid</PVAL>
    </PROP>
    <PROP NAME="Color Family">
      <PVAL>brown</PVAL>
    </PROP>
  </RECORD>
</RECORDS>

当前结果:

PVAL|||298374234
PVAL|||1231
PVAL|||brown
PVAL|||medium
PVAL|||7
PVAL|||solid
PVAL|||brown
Sku_ID|||298374234
LotNum|||1231
COLOR|||brown
WIDTH|||medium
SIZE|||7
Pattern|||solid
Color Family|||brown
<?xml version="1.0" encoding="UTF-8" ?>
<RECORDS>
  <RECORD>
    <PROP NAME="Sku_ID">
      <PVAL>298374234</PVAL>
    </PROP>
    <PROP NAME="LotNum">
      <PVAL>1231</PVAL>
    </PROP>
    <PROP NAME="COLOR">
      <PVAL>brown</PVAL>
    </PROP>
    <PROP NAME="WIDTH">
      <PVAL>medium</PVAL>
    </PROP>
    <PROP NAME="SIZE">
      <PVAL>7</PVAL>
    </PROP>
    <PROP NAME="Pattern">
      <PVAL>solid</PVAL>
    </PROP>
    <PROP NAME="Color Family">
      <PVAL>brown</PVAL>
    </PROP>
  </RECORD>
</RECORDS>
我想要什么:

PVAL|||298374234
PVAL|||1231
PVAL|||brown
PVAL|||medium
PVAL|||7
PVAL|||solid
PVAL|||brown
Sku_ID|||298374234
LotNum|||1231
COLOR|||brown
WIDTH|||medium
SIZE|||7
Pattern|||solid
Color Family|||brown
<?xml version="1.0" encoding="UTF-8" ?>
<RECORDS>
  <RECORD>
    <PROP NAME="Sku_ID">
      <PVAL>298374234</PVAL>
    </PROP>
    <PROP NAME="LotNum">
      <PVAL>1231</PVAL>
    </PROP>
    <PROP NAME="COLOR">
      <PVAL>brown</PVAL>
    </PROP>
    <PROP NAME="WIDTH">
      <PVAL>medium</PVAL>
    </PROP>
    <PROP NAME="SIZE">
      <PVAL>7</PVAL>
    </PROP>
    <PROP NAME="Pattern">
      <PVAL>solid</PVAL>
    </PROP>
    <PROP NAME="Color Family">
      <PVAL>brown</PVAL>
    </PROP>
  </RECORD>
</RECORDS>
示例xml:

PVAL|||298374234
PVAL|||1231
PVAL|||brown
PVAL|||medium
PVAL|||7
PVAL|||solid
PVAL|||brown
Sku_ID|||298374234
LotNum|||1231
COLOR|||brown
WIDTH|||medium
SIZE|||7
Pattern|||solid
Color Family|||brown
<?xml version="1.0" encoding="UTF-8" ?>
<RECORDS>
  <RECORD>
    <PROP NAME="Sku_ID">
      <PVAL>298374234</PVAL>
    </PROP>
    <PROP NAME="LotNum">
      <PVAL>1231</PVAL>
    </PROP>
    <PROP NAME="COLOR">
      <PVAL>brown</PVAL>
    </PROP>
    <PROP NAME="WIDTH">
      <PVAL>medium</PVAL>
    </PROP>
    <PROP NAME="SIZE">
      <PVAL>7</PVAL>
    </PROP>
    <PROP NAME="Pattern">
      <PVAL>solid</PVAL>
    </PROP>
    <PROP NAME="Color Family">
      <PVAL>brown</PVAL>
    </PROP>
  </RECORD>
</RECORDS>

298374234
1231
棕色的
中等的
7.
固体
棕色的

我不想硬编码
attr
名称。我想在访问它们时检索它们。我该怎么做?

下面是我对您的代码的编辑,用于打印属性名称和值。。。它是基于xpath的

public static void main(String s[]) throws Exception{
     VTDGenHuge vg = new VTDGenHuge();
        if (vg.parseFile("d:\\xml\\sku_extract_main.xml",true,VTDGenHuge.MEM_MAPPED)) {
            VTDNavHuge vnh = vg.getNav();
            AutoPilotHuge aph = new AutoPilotHuge(vnh);
            AutoPilotHuge aph2 = new AutoPilotHuge(vnh);
            aph.selectElementNS("*", "*");
            aph2.selectXPath("@*");
            int i = 0;
            while (aph.iterate()) {
                System.out.println(vnh.toString(vnh.getCurrentIndex()));
                int t = vnh.getText();
                if (t != -1) {
                    System.out.println(vnh.toString(vnh.getCurrentIndex()) + "|||" + vnh.toNormalizedString(t));
                    i++;
                }

// below is the my addition
// it basically evaluates the attribute axis
// push pop ensure that the node iteration of the outer while loop
// is consistent
// resetXPath is key here, without it, xpath will not work except for the
// first node returned by aph.iterate()
                vnh.push();

                while((i=aph2.evalXPath())!=-1){
                    System.out.println(" attr name "+vnh.toString(i));
                    System.out.println("attr val   "+vnh.toString(i+1));
                }
                aph2.resetXPath();
                vnh.pop();
            }
}

你能补充一下你在做什么吗
vnh.toNormalizedString(t)
这会给我属性的值,例如298374234,但只在if范围内,而不在while范围内,在while范围内抛出
IndexOutOfBoundsException
。而
vnh.toString(i+1)
给了我属性的名称,例如Sku_ID。你说的indexoutofBoundsException是什么意思?关于indexoutofBoundsException,我试图在while范围内提取attr值,即vnh.toNormalizedString(t)。以及
t=vnh.getText();vnh.toNormalizedString(t)
这是该节点的实际值。它看起来一点都不像属性,是您所指的文本值吗?