2012-05-09 77 views
-2

我有這個問題。我有一個XML數據,但不是.xml格式。如何轉義XML空值?

我需要顯示基於搜索關鍵字的結果,然後它以xml格式返回值。但是,有些節點不包含任何值(空值)。我如何逃避這個價值?

我想顯示只有值(非空節點)的節點。謝謝。

這是我的代碼。我是一個java編程的初學者。我儘可能地需要幫助。謝謝大家!

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder db = dbf.newDocumentBuilder(); 
       InputSource is = new InputSource(); 
       is.setCharacterStream(new StringReader(result)); 
       Document doc = db.parse(is); 
       NodeList nodes = doc.getElementsByTagName("DOCUMENT"); 

       // iterate the DOCUMENT     
       out.println("<table border='0'>"); 
       int index_location=nodes.getLength()+1; 
       for (int i = 0; i < nodes.getLength(); i++) { 

        locations_array+="["; 

        Element element = (Element) nodes.item(i); 

        NodeList IDS = element.getElementsByTagName("IDS"); 
        Element line = (Element) IDS.item(0); 
        out.println("<tr><td>Company ID :</td><td>"); 
        out.println(getCharacterDataFromElement(line)); 
        out.println("</td></tr>"); 

        NodeList FULL_NAME = element.getElementsByTagName("FULL_NAME"); 
        line = (Element) FULL_NAME.item(0); 
        out.println("<tr><td>Company Name :</td><td>"); 
        out.println(getCharacterDataFromElement(line)); 
        out.println("</td></tr>"); 
        locations_array+="'"+getCharacterDataFromElement(line)+"',"; 

        NodeList AD_WEIGHT = element.getElementsByTagName("AD_WEIGHT"); 
        line = (Element) AD_WEIGHT.item(0); 
        out.println("<tr><td>AD_WEIGHT :</td><td>"); 
        out.println(getCharacterDataFromElement(line)); 
        out.println("</td></tr>"); 

        NodeList MAP = element.getElementsByTagName("MAP"); 
        line = (Element) MAP.item(0); 
        out.println("<tr><td>Longitude and Latitude :</td><td>"); 

        if (getCharacterDataFromElement(line)!="No data provided."){ 
         String st = getCharacterDataFromElement(line); 
         String str[] = st.split(":", 2); 
         String latlong; 
         latlong = str[1]; 
         out.println(latlong); 
         locations_array+="'"+latlong+"',"; 
        }else{ 
         out.println("No data provided."); 
         locations_array+="'0,0',"; 
        } 

        out.println("</td></tr>"); 

        NodeList STATE = element.getElementsByTagName("STATE"); 
        line = (Element) STATE.item(0); 
        out.println("<tr><td>State :</td><td>"); 
        out.println(getCharacterDataFromElement(line)); 
        out.println("</td></tr>"); 

        NodeList CITY = element.getElementsByTagName("CITY"); 
        line = (Element) CITY.item(0); 
        out.println("<tr><td>City :</td><td>"); 
        out.println(getCharacterDataFromElement(line)); 
        out.println("</td></tr>"); 

        NodeList ADDRESS = element.getElementsByTagName("ADDRESS"); 
        line = (Element) ADDRESS.item(0); 
        out.println("<tr><td>Address :</td><td>"); 
        out.println(getCharacterDataFromElement(line)); 
        out.println("</td></tr>"); 

        NodeList PHONE = element.getElementsByTagName("PHONE"); 
        line = (Element) PHONE.item(0); 
        out.println("<tr><td>Phone No :</td><td>"); 
        out.println(getCharacterDataFromElement(line)); 
        out.println("</td></tr>"); 

        NodeList CLASS_DESC = element.getElementsByTagName("CLASS_DESC"); 
        line = (Element) CLASS_DESC.item(0); 
        out.println("<tr><td>CLASS_DESC :</td><td>"); 
        out.println(getCharacterDataFromElement(line)); 
        out.println("</td></tr>"); 

        NodeList MAIN_CLASS = element.getElementsByTagName("MAIN_CLASS"); 
        line = (Element) MAIN_CLASS.item(0); 
        out.println("<tr><td>Category :</td><td>"); 
        out.println(getCharacterDataFromElement(line)); 
        out.println("</td></tr>"); 

        NodeList URL = element.getElementsByTagName("URL"); 
        line = (Element) URL.item(0); 
        out.println("<tr><td>Website :</td><td>"); 
        out.println(getCharacterDataFromElement(line)); 
        out.println("</td></tr>"); 

        NodeList EMAIL = element.getElementsByTagName("EMAIL"); 
        line = (Element) EMAIL.item(0); 
        out.println("<tr><td>Email :</td><td>"); 
        out.println(getCharacterDataFromElement(line)); 
        out.println("</td></tr>"); 

        NodeList DISPLAY_AD = element.getElementsByTagName("DISPLAY_AD"); 
        line = (Element) DISPLAY_AD.item(0); 
        out.println("<tr><td>DISPLAY_AD :</td><td>"); 
        out.println(getCharacterDataFromElement(line)); 
        out.println("</td></tr>"); 

        NodeList ADV_PATH = element.getElementsByTagName("ADV_PATH"); 
        line = (Element) ADV_PATH.item(0); 
        out.println("<tr><td>ADV_PATH :</td><td>"); 
        out.println(getCharacterDataFromElement(line)); 
        out.println("</td></tr>"); 

        NodeList SORT_NO = element.getElementsByTagName("SORT_NO"); 
        line = (Element) SORT_NO.item(0); 
        out.println("<tr><td>SORT_NO :</td><td>"); 
        out.println(getCharacterDataFromElement(line)); 
        out.println("</td></tr>"); 

        NodeList TOTAL_ADDRESS = element.getElementsByTagName("TOTAL_ADDRESS"); 
        line = (Element) TOTAL_ADDRESS.item(0); 
        out.println("<tr><td>TOTAL_ADDRESS :</td><td>"); 
        out.println(getCharacterDataFromElement(line)); 
        out.println("</td></tr>"); 

        out.println("<tr><td>&nbsp;</td><td>&nbsp;</td></tr>"); 

        index_location--; 
        locations_array+="'"+index_location+"']"; 
        //locations_array+=",";      
       } 
       out.println("</table>"); 

這是示例XML

<DOCUMENT> 
      <IDS>53850_WP</IDS> 
      <FULL_NAME>xxx</FULL_NAME> 
      <AD_WEIGHT>60</AD_WEIGHT> 
      <MAP>1111:1.12344556,111.67890</MAP> 
      <STATE>xxx xxx</STATE> 
      <CITY>xxxx</CITY> 
      <ADDRESS>123 xxx xxxx xxx</ADDRESS> 
      <PHONE>12-12344551</PHONE> 
      <CLASS_DESC>Banks</CLASS_DESC> 
      <MAIN_CLASS>Banks</MAIN_CLASS> 
      <URL>www.qwe.com</URL> 
      <EMAIL>[email protected]</EMAIL> 
      <DISPLAY_AD /> 
      <ADV_PATH /> 
      <SORT_NO>123</SORT_NO> 
      <TOTAL_ADDRESS>123</TOTAL_ADDRESS> 
      <INLINE_IMAGE /> 
      <E_PRODUCT /> 
      <FIELD1 /> 
     </DOCUMENT> 

從樣品,有喜歡<INLINE_IMAGE><E_PRODUCT><FIELD1>空節點。我如何從結果頁面中顯示來避免這種情況?

+8

[堆棧溢出不會讀了這一切。(http://meta.stackexchange.com/a/129787/133242) –

回答

1

最好的方法是不要爲它放置任何文本值。例如,如果它是一個元素,值將是<Element/>。注意開放標籤自己關閉。您可以閱讀有關nillable元素,因爲您需要爲其構建模式定義(XSD)。

另一方面,屬性不支持nillable類型。我個人的做法是不要放置屬性。在XPath表達式\\Element[not(@value)]中發現沒有value屬性的元素。這允許您區分空字符串和空字符串。

0

XML沒有null的概念,也沒有如何轉義它。在我看來,你有兩個選擇:

  1. 省略輸出標籤(S)和內容當你遇到一個空值
  2. 採用一些約定爲代表的空值的XML模式。
+0

XML確實有類似空稱爲零 –

+0

@JamesMohler一個概念 - ' xsi:nil'只有在使用[XML Schema](http://www.w3.org/TR/xmlschema-1/#xsi%5Fnil)驗證時纔有效。例如,如果使用DTD,則'xsi:nil'完全不能用於屬性。從技術上講,XML Schema本身不是XML,在使用XML時不需要使用XML Schema。 –