2013-11-25 3 views
1

JAVA를 사용하여 XML 파일을 읽으려고합니다. XML 파일 : - < 내 코드 나는 해시 맵의 매개 변수의 키와 값을 읽기 위해 노력하고Java를 사용하여 복잡한 XML 값 읽기

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


<document> 
<testCaseDataName> 
    <id>1</id > 
    <testCaseName>EditTest</testCaseName > 
    <expectedResult>true</expectedResult > 

</testCaseDataName> 
<testCaseDataName> 
    <id>2</id > 
    <testCaseName>AddTest</testCaseName > 
    <expectedResult>true</expectedResult> 
    <parameter> 
    <key>featues</key > 
    <value>new</value> 
    </parameter> 
</testCaseDataName> 

    <testCaseDataName> 
    <id>3</id > 
    <testCaseName>AddTest</testCaseName > 
    <expectedResult>true</expectedResult> 
    <parameter> 
    <key>projectType</key > 
    <value>old</value> 
    </parameter> 
    <parameter> 
    <key>Name</key > 
    <value>Marvel</value> 
    </parameter> 
    <parameter> 
    <key>status</key > 
    <value>ACTIVE</value> 
    </parameter> 
    <parameter> 
    <key>canOrder</key > 
    <value>Yes</value> 
    </parameter> 
</testCaseDataName> 
<testCaseDataName> 
    <id>4</id > 
    <testCaseName>AddTest</testCaseName > 
    <expectedResult>empty</expectedResult> 
    <parameter> 
    <key>projectType</key > 
    <value>GEN</value> 
    </parameter> 
    <parameter> 
    <key>Name</key > 
    <value>HPM</value> 
    </parameter> 
    <key>no status</key > 
    <value>ACTIVE</value> 
    <parameter> 
    <key>canOrder</key > 
    <value>Yes</value> 
    </parameter> 
</testCaseDataName> 

</document> 

라도 좋습니다입니다 : -

내 코드 만의 첫 번째 집합을 읽고
public class JDOM { 

    public static void main(String[] args) throws JDOMException, IOException { 
     // TODO Auto-generated method stub 
     File xsdfile = new File("file.xsd"); 
     XMLReaderJDOMFactory schemafac = new XMLReaderXSDFactory(xsdfile); 
     SAXBuilder builder = new SAXBuilder(schemafac); 
     //Document doc = new SAXBuilder().build(new File("testdbcsv/ACL.xml")); 
     Document doc = builder.build(new File("file.xml")); 
     Element root = doc.getRootElement(); 
     for (Element testcase : root.getChildren()) { 
      String id = testcase.getChildText("id"); 
      String testCaseName = testcase.getChildText("testCaseName"); 
      String expectedResult = testcase.getChildText("expectedResult"); 
      System.out.println(expectedResult); 
      HashMap<String,String> parameters = new LinkedHashMap<String,String>(); 
      Element params = testcase.getChild("parameter"); 
      System.out.println(params); 
      if (params != null) { 
       Iterator<Element> it = params.getChildren().iterator(); 
       while (it.hasNext()) { 
        Element key = it.next(); 
        Element val = it.next(); 
        parameters.put(key.getValue(), val.getValue()); 
       } 
      } 
      parameters.put("expectedResult", expectedResult); 
      ObjectMapper obj = new ObjectMapper(); 
      String jsonString = obj.writeValueAsString(parameters); 
      System.out.println(jsonString); 

     } 
     } 
    } 

키와 값을 읽고 다른 키와 값을 읽지 않습니다. 출력은 다음과 같습니다 -

{"expectedResult":"true"} 
{"featues":"w,f","expectedResult":"true"} 
{"projectType":"MEMOGEN","expectedResult":"true"} 
{"projectType":"MEMOGEN","expectedResult":"empty"} 

나는 다른 키 값도 문자열에 있어야합니다. 아무도 도울 수 내 코드를 수정

+0

누구나 대답 할 수 있습니까? 긴급 [http://stackoverflow.com/questions/24757825/how-to-read-xml-attribute-values-hierarchically-like-parentnodename-childnodeatt][1] [1 필요 ] : http://stackoverflow.com/questions/24757825/how-to-read-xml-attribute-values-hierarchically-like-parentnodename-childnodeatt –

+0

내 대답은 아래를보십시오. 도움이 될 것입니다 – Newbie

답변

0
List<Element> params = testcase.getChildren("parameter"); 
      for(Element ele : params){ 
       String key = ele.getChildText("key"); 
       String value = ele.getChildText("value"); 
       parameters.put(key, value); 
      } 

제 생각에는 이것이 내 문제를 해결할 것입니다.

0

Xpath를 사용하면 XML에서 많은 복잡한 표현식을 읽는 데 도움이됩니다.

xml을 입력하여 json을 렌더링하는 xslt를 작성하십시오. Xslt는 for 루프도 지원합니다. 이것은 시간 효율적이기도합니다. 나는 100 밀리 크기의 XML 3 MB의 구문 분석 한 당신은

testcase.getChild("parameter") 

getChild()가 지정된 이름의 첫번째 자식 요소를 반환 사용하고

+0

JDOM 만 사용하여 계속하고 싶습니다. 다른 매개 변수를 읽는 방법에 대해 제발 도와주십시오. – Newbie

+1

당신이 이미이 말을 처음 접했을 때 누군가 다른 접근법을 채택하는 데 도움이되는 제안을하면 그 접근법이 당신의 요구 사항을 충족시키지 못하는 이유를 말해주는 것이 예의입니다. –

1

(I는 XSLT 내부 작업의 수백을 수행). 당신은 "매개 변수"라는 이름의 모든 자식을 원합니다. 따라서

testcase.getChildren("parameter") 

으로 전화하여 반환 된 모든 요소를 ​​반복해야합니다.

+0

그것은 매개 변수 자식 목록을 반환하며 올바르게 반복해야합니까? – Newbie

+0

그 코드를 알려 주실 수 있습니까? – Newbie

+1

예. javadoc을 읽습니다. http://www.jdom.org/docs/apidocs/org/jdom2/Element.html#getChildren%28java.lang.String%29 –