2012-03-18 11 views
7

私はXMLファイルを持ち、要素にも属性があります。 私は単純なjavaファイルを持っています。これは、要素ファイルの値を解析して値を出力しますが、要素の属性値は出力しません。 属性値を印刷するのを手伝ってください。 は、私は以下のコード貼り付けています: -------- employees.xmlファイルを-----------Javaを使用して要素値と属性値を取得するXML解析

<?xml version="1.0" encoding="UTF-8"?> 

<Personnel> 

    <Employee type="permanent"> 
    <Name>Seagull</Name> 
    <Id>3674</Id> 
    <Age>34</Age> 
    </Employee> 

    <Employee type="contract"> 
    <Name>Robin</Name> 
    <Id>3675</Id> 
    <Age>25</Age> 
</Employee> 

    <Employee type="permanent"> 
    <Name>Crow</Name> 
    <Id>3676</Id> 
    <Age>28</Age> 
    </Employee> 

</Personnel> 

----------- ----------------- StoreData.java ------------------------------ -----------

import java.io.*; 
import org.w3c.dom.*; 
import org.xml.sax.*; 
import javax.xml.parsers.*; 
import javax.xml.transform.*; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

public class StoreData{ 
static public void main(String[] arg) { 
    try{ 
     BufferedReader bf = new BufferedReader(new  InputStreamReader(System.in)); 
     System.out.print("Enter XML file name: "); 
     String xmlFile = bf.readLine(); 
     File file = new File(xmlFile); 
      if (file.exists()){ 
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder builder = factory.newDocumentBuilder(); 
      Document doc = builder.parse(xmlFile); 
         //Create transformer 
      Transformer tFormer = TransformerFactory.newInstance().newTransformer(); 
        //Output Types (text/xml/html) 
      tFormer.setOutputProperty(OutputKeys.METHOD, "text"); 
//    Write the document to a file 
      Source source = new DOMSource(doc); 
//    Create File  to view your xml data as (vk.txt/vk.doc/vk.xls/vk.shtml/vk.html) 
      Result result = new StreamResult(new File("file.txt")); 
      tFormer.transform(source, result); 
      System.out.println("File creation successfully!"); 
     } 
     else{ 
      System.out.println("File not found!"); 
     } 
    } 
    catch (Exception e){ 
     System.err.println(e); 
     System.exit(0); 
    } 
} } 

+0

は、リンクを参照してくださいhttp://stackoverflow.com/questions/9781568/update-data-in-java-class-as XML-file-in-the-attribute-in-the-XMLファイル/ 9783154#9783154 –

答えて

1

あなたが次を使用する可能性がありますorg.w3c.domの使用しているので:

 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     InputSource is = new InputSource(new StringReader(xmlFile)); 
     Document doc = builder.parse(is); 

     NodeList nodeList = doc.getElementsByTagName("Employee"); 

     for (int i = 0; i < nodeList.getLength(); i++) {     
      Node node = nodeList.item(i); 

      if (node.hasAttributes()) { 
       Attr attr = (Attr) node.getAttributes().getNamedItem("type"); 
       if (attr != null) { 
        String attribute= attr.getValue();      
        System.out.println("attribute: " + attribute);      
       } 
      } 
     } 
1

Wあなたが使用している帽子は、デフォルトで要素テキストに変換するXSLT変換です。同じ技術を使用して

、人は自分の「スタイルシート」を必要とします。私の上

InputStream xsltIn = StoreData.class.getResourceAsStream("/employees.xslt"); 
    StreamSource xslt = new StreamSource(xsltIn); 
    ///StreamSource xslt = new StreamSource(".../employees.xslt"); 

    Transformer tFormer = TransformerFactory.newInstance().newTransformer(xslt); 

はリソースではなく、ファイル・システム・ファイルを使用し、それをアプリケーションで圧縮されています。

employees.xslt:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="/Personnel"> 
Personnel: 
     <xsl:apply-templates select="./*"/> 
End personnel. 
    </xsl:template> 

    <xsl:template match="Employee"> 
* Employee:<xsl:apply-templates select="./@*|./*"/> 

    </xsl:template> 

    <xsl:template match="Name|Id|Age|@type"> 
    - <xsl:value-of select="name()"/>: <xsl:value-of select="."/> 
    </xsl:template> 
</xsl:stylesheet> 

生成します:

Personnel: 

* Employee: 
    - type: permanent 
    - Name: Seagull 
    - Id: 3674 
    - Age: 34 
* Employee: 
    - type: contract 
    - Name: Robin 
    - Id: 3675 
    - Age: 25 
* Employee: 
    - type: permanent 
    - Name: Crow 
    - Id: 3676 
    - Age: 28 
End personnel. 
関連する問題