你的XML文件是怎么样的?
你的child1的那个tag是什么?

解决方案 »

  1.   

    <LotSize from="10001" to="35000">
    <InspectionLevel level="S-1">C</InspectionLevel>
    <InspectionLevel level="S-2">D</InspectionLevel>
    <InspectionLevel level="S-3">F</InspectionLevel>
    <InspectionLevel level="S-4">H</InspectionLevel>
    <InspectionLevel level="I">K</InspectionLevel>
    <InspectionLevel level="II">M</InspectionLevel>
    <InspectionLevel level="III">N</InspectionLevel>
    </LotSize>
    这是其中一段,dom能找到InspectionLevel的Attr,却无法取得nodeValue.
      

  2.   

    以下是我写的另一个xml测试程序:
    import javax.xml.parsers.*;
    import org.w3c.dom.*;public class test
    {
    public static void main(String[] args)
    {
    try{
            DocumentBuilderFactory factory =
                DocumentBuilderFactory.newInstance();
            //factory.setValidating(true);
            //factory.setNamespaceAware(false);
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse("g:\\table.xml"); Element  element  =  doc.getDocumentElement();
    System.out.println(element.getTagName());
    NodeList  listChild1=element.getChildNodes();
    System.out.println(listChild1.getLength());
      Element  child1=(Element)((Element)(listChild1.item(1))).getChildNodes().item(1);
      System.out.println(child1.getTagName());
      System.out.println(child1.getAttribute("level"));
    System.out.println(child1.getNodeValue()); }catch(Exception e)
    {
    e.printStackTrace();
    } }
    }
    这是xml文件table.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <Table>
    <ROW size="3">
    <COL level="S-1">A</COL>
    <COL level="S-2">B</COL>
    <COL level="S-3">C</COL>
    </ROW>
    </Table>
    这是输出结果:
    Table
    3
    COL
    S-1
    null为什么nodeValue总是null值呢?应该是A才对呀!为什么?
      

  3.   

    是这样的,你的child1并不是一个文本结点(textnode),所以用getnodevalue取出的值为null。
    利用这个方法:child1.firstchild().getnodevalue()
    应该可以了
      

  4.   

    可是我并不想按first to next的顺序,想按指定index的取得node,
      

  5.   

    我的意思是:你把System.out.println(child1.getNodeValue());替换成System.out.println(child1.firstchild().getNodeValue()); 
    因为child1.firstchild()取得child1的textnode子结点,在取textnode的值,试试
      

  6.   

    I see,I see,
    能给我讲讲原理吗?
    马上给分!
      

  7.   

    或给我讲讲
    ELEMENT_NODE,
    TEXT_NODE,
    ENTITY_NODE
    ...
    的区别?
      

  8.   

    turbochen:你试过了吗?我试了还是不行啊
    查api,Element并没有firstchild这个方法,而且firstchild不符合java的命名规则,肯定是不存在。只有Node里面有个getFirstChild方法,但是我试了,还是不行啊
    请 cloudwon做详细解释
      

  9.   

    你可以吗?那麻烦你把可以的代码和xml文件贴一下吧,我已经被这个问题困扰3天了
    谢谢
      

  10.   

    你可以吗?麻烦你将可以的代码和xml贴一下,我已经被这个问题困扰3天了
    谢谢
      

  11.   

    就是以上第二个example,将最后一个
    System.out.println(child1.getNodeValue());
    改为:
    System.out.println(child1.getFirstChild().getNodeValue());
    就行了.
      

  12.   

    to: turbochen(程序员) 
    你可以看看xml的规范,xml中的节点(node)分为很多种,getnodevalue()和getnodename()这两个方法对于不同的节点类型(node的子类,如element、textnode等)执行效果是不同的。这些规范上应该都有。
    对于上面的例子,要先获得child1的子结点,即它所包含着的文本结点(这种结构组织方法好想和我们直观想想的好想不太一样,呵呵),然后利用文本结点的getnodevalue()取得文本串。也就是说:比如:<a>b</a>,“b”并不是<a>节点的一部分,而是被看成一个文本结点,并且作为<a>的子结点。
    意思大概是这样,表述不太好,函数名也记不大清楚了。呵呵
    你看看
      

  13.   

    好象只有dom是这样龟定的。我觉得两种规范各有优缺点,如果能结合起来写个api就爽了
      

  14.   

    正如上面的网友讲的那样,我开始的时候总是怀疑自己的程序有问题的,但是后来自己看了SAX的文档才知道,是DOM实现本身就是这样的。同时在XML DOM中节点可以分成7个类型的,你看JDK源代码就知道了,当然每一个XML书籍上也有的,这里我推荐一本书《xml bible》。还有一点,JAVA带的那个XML解析包有点奇怪的,反正有起来不能和微软的那个比。举一个例子:
    person.xml
    <?xml version="1.0"?>
    <person>
    <name>
    ZosaTapo
    </name>
    </person>
    解析程序认为这个文档根元素(person)有3个子节点。
    当然是两个文本节点(实际上就是我们<name>前和</name>后的回车换行符)
    和一个我们真正想的节点(person).同时解析person的时候,name的值也包含回车换行符(你要是在unix下面可能有些不同的,请使用java定义的行分割符)。元素节点的值是空的,因为他的子节点文本节点才可以取值。下面我写一个简单的解析程序,还有一个xml文件。
    xml文件:
    <?xml version="1.0" standalone="yes"?>
    <GREETING id="test">
    <person>
    Reic Yang
    </person>
    </GREETING>
    java源代码:
    import java.io.*;
    import java.lang.*;
    import javax.xml.parsers.*;
    import org.xml.sax.*;
    import org.w3c.dom.*;
    class txml
    {
    private static final String FILE_PATH="txml.xml";
    private Document doc=null;
    private DocumentBuilder docb=null;
    private DocumentBuilderFactory docbf=null;
    private Element root=null;
    public void loadDocument(String filename)
    {
    try
    {
    docbf=DocumentBuilderFactory.newInstance();
    docb=docbf.newDocumentBuilder();
    doc=docb.parse(new File(filename));
    root=doc.getDocumentElement();
    }
    catch(ParserConfigurationException e){e.printStackTrace();}
    catch(SAXException e){e.printStackTrace();}
    catch(IOException e){e.printStackTrace();}
    }

    public void loadDocument()
    {
    loadDocument(FILE_PATH);
    }
    public Element getRoot()
    {
    return root;
    }
    public Document getDoc()
    {
    return doc;
    }
    public static void spaces(int depth)
    {
    //print prefix space to show level
    for(int d=0;d<depth;d++)
    {
    System.out.print("  ");
    }
    //System.out.println();
    }

    public static void printTree(Node root,int depth)
    {
    System.out.println();
    //print attributes
    if(root.hasAttributes())
    {
    spaces(depth);
    System.out.println("******Node Attributes List******");
    NamedNodeMap namednodemap=root.getAttributes();
    for(int a=0;a<namednodemap.getLength();a++)
    {
    spaces(depth);
    System.out.println("Attribute Name: "+namednodemap.item(a).getNodeName()
    +"    Attribute Value: "+namednodemap.item(a).getNodeValue());
    }
    }

    //print nodes
    NodeList nodelist=root.getChildNodes();
    spaces(depth);
    System.out.println("******Node ChildNodes List******");
    spaces(depth);
    System.out.println("Nodes Total:"+nodelist.getLength());
    for(int n=0;n<nodelist.getLength();n++)
    {
    Node node=nodelist.item(n);

    spaces(depth);
    System.out.print("Node Type :"+node.getNodeType());
    System.out.print("  Node Name :"+node.getNodeName());
    if(node.getNodeType()!=1)
    {
    System.out.print("   Node Value :"+node.getNodeValue());
    }
    System.out.println();

    if(node.getNodeType()==1)
    {
    printTree(node,depth+1);
    }
    }
    System.out.println();
    }
    public static void main(String args[])
    {
    txml t=new txml();
    if(args.length!=1)
    {
    t.loadDocument();
    }
    else
    {
    t.loadDocument(args[0]);
    }
    Document doc=t.getDoc();
    System.out.println(doc.getChildNodes().getLength()); 
    Element root=t.getRoot();
    System.out.println("+++++++++++++++++++++++++++++++++");
    System.out.println("+        Node List Sample       +");
    System.out.println("+++++++++++++++++++++++++++++++++");
    printTree(root,0);
    }
    }
      

  15.   

    dear professer
      请问下面是什么意思?
      dim x as objectPrivate Sub CmdShow_Click()
        Dim Rs As ador.Recordset
        Dim X As Object
        Dim temp As String
        Dim Item As ListItem
        On Error GoTo Handle
        LvSegment.ListItems.Clear
        Set X = CreateObject("support.staticdata")
        If Not SHOWCHECK Then Exit Sub
        Screen.MousePointer = 11
        Set Rs = X.SELelet(Trim(text1.Text), Trim(Text2.Text), Trim(Text3.Text))
        这是个查询按钮的源代码,该代码如何连接数据库的,RS是如何获得记录集
    set Rs=x.select(trim(text1.text).....)中SET rs=x.select是什么意思呢?
        Screen.MousePointer = 0
        If Rs Is Nothing Then
                LBLTIP.Caption = "数据库繁忙,请重试或与管理员联系"
                GoTo Over
        End If
        If Rs.BOF And Rs.EOF Then
                LBLTIP.Caption = "没找到您要查找的纪录,请重新输入"
                GoTo Over
        End If
        ' add new data on listview
        Do While Not Rs.EOF
            Set Item = LvSegment.ListItems.add(, , Trim("" & Rs!customerid))
            Item.SubItems(1) = Trim("" & Rs!companyname)
            Item.SubItems(2) = Trim("" & Rs!contacttitle)
            Item.SubItems(3) = Format(Trim("" & Rs!birthdate), "YYYY-MM-DD")
            Item.SubItems(4) = Format(Trim("" & Rs!city), "YYYY-MM-DD")
            Item.SubItems(5) = Format(Trim("" & Rs!country), "0.00")
            Rs.MoveNext
        Loop            CmdUPDATE.Enabled = True
            CmdDEL.Enabled = True
            CmdADD.Enabled = True
        End IfOver:
        Screen.MousePointer = 0
    Exit Sub
    Handle:
        Screen.MousePointer = 0
        MsgBox Err.Description, vbCritical, Me.Caption
        GoTo Over
    End Sub
      

  16.   

    dear professer
      请问下面是什么意思?
      dim x as objectPrivate Sub CmdShow_Click()
        Dim Rs As ador.Recordset
        Dim X As Object
        Dim temp As String
        Dim Item As ListItem
        On Error GoTo Handle
        LvSegment.ListItems.Clear
        Set X = CreateObject("support.staticdata")
        If Not SHOWCHECK Then Exit Sub
        Screen.MousePointer = 11
        Set Rs = X.SELelet(Trim(text1.Text), Trim(Text2.Text), Trim(Text3.Text))
        这是个查询按钮的源代码,该代码如何连接数据库的,RS是如何获得记录集
    set Rs=x.select(trim(text1.text).....)中SET rs=x.select是什么意思呢?
    定义dim x as object
       set x=createobject("support.staticsupport")又是什么意思呢!急切!急切!
        Screen.MousePointer = 0
        If Rs Is Nothing Then
                LBLTIP.Caption = "数据库繁忙,请重试或与管理员联系"
                GoTo Over
        End If
        If Rs.BOF And Rs.EOF Then
                LBLTIP.Caption = "没找到您要查找的纪录,请重新输入"
                GoTo Over
        End If
        ' add new data on listview
        Do While Not Rs.EOF
            Set Item = LvSegment.ListItems.add(, , Trim("" & Rs!customerid))
            Item.SubItems(1) = Trim("" & Rs!companyname)
            Item.SubItems(2) = Trim("" & Rs!contacttitle)
            Item.SubItems(3) = Format(Trim("" & Rs!birthdate), "YYYY-MM-DD")
            Item.SubItems(4) = Format(Trim("" & Rs!city), "YYYY-MM-DD")
            Item.SubItems(5) = Format(Trim("" & Rs!country), "0.00")
            Rs.MoveNext
        Loop            CmdUPDATE.Enabled = True
            CmdDEL.Enabled = True
            CmdADD.Enabled = True
        End IfOver:
        Screen.MousePointer = 0
    Exit Sub
    Handle:
        Screen.MousePointer = 0
        MsgBox Err.Description, vbCritical, Me.Caption
        GoTo Over
    End Sub
      

  17.   

    jdk自带的是crimson 的吧? 大家还是用 xerces 吧。。嘻嘻http://xml.apache.org/
      

  18.   

    TIYILON(太乙郎) 
    jdk1.4自带的是jaxp!
      

  19.   

    大家可以常去ibm的DeveloperWorks去看看,不管中英文的网站都很棒。