2013-10-10 57 views
0

我發現了一個問題,在分析XML文件問題在解析XML

這是XML文件(如字符串)的樣本:

<ns:fetchXmlResponse xmlns:ns=\ " http:/ws.src.com \> 
    <ns:return> 
     <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?> 
     <TemplateData> 
      <TemplatePrescriptionData> 
       <id>24</id> 
       <noOfRefills>1</noOfRefills> 
       <templateId>67</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Norco</prescriptionName> 
       <prescriptionStrength>5/325</prescriptionStrength> 
       <prescriptionUnit>mg</prescriptionUnit> 
       <prescriptionForm>Tablet(s)</prescriptionForm> 
       <prescriptionSignature>1-2tabs po q4-6 hours, prn 
       </prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>15</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
      <TemplatePrescriptionData> 
       <id>25</id> 
       <noOfRefills>2</noOfRefills> 
       <templateId>67</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Motrin 
       </prescriptionName> 
       <prescriptionStrength>600</prescriptionStrength> 
       <prescriptionUnit>mg</prescriptionUnit> 
       <prescriptionForm>Tablet(s)</prescriptionForm> 
       <prescriptionSignature>1tab po q6 hours, 
       </prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>28</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
      <TemplatePrescriptionData> 
       <id>26</id> 
       <noOfRefills>2</noOfRefills> 
       <templateId>67</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Chlorhexidine</prescriptionName> 
       <prescriptionStrength>0.12</prescriptionStrength> 
       <prescriptionUnit>%</prescriptionUnit> 
       <prescriptionForm>Mouth 
       </prescriptionForm> 
       <prescriptionSignature>rinse mouth bid 
       </prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>1</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
      <TemplatePrescriptionData> 
       <id>28</id> 
       <noOfRefills>1</noOfRefills> 
       <templateId>76</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Norco</prescriptionName> 
       <prescriptionStrength>5/325</prescriptionStrength> 
       <prescriptionUnit>mg</prescriptionUnit> 
       <prescriptionForm>Tablet(s)</prescriptionForm> 
       <prescriptionSignature>1-2tabs po q4-6 hours, prn 
       </prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>15</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
      <TemplatePrescriptionData> 
       <id>30</id> 
       <noOfRefills>2</noOfRefills> 
       <templateId>76</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Motrin 
       </prescriptionName> 
       <prescriptionStrength>600</prescriptionStrength> 
       <prescriptionUnit>mg</prescriptionUnit> 
       <prescriptionForm>Tablet(s)</prescriptionForm> 
       <prescriptionSignature>1tab po q6 hours,prn 
       </prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>28</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
      <TemplatePrescriptionData> 
       <id>31</id> 
       <noOfRefills>2</noOfRefills> 
       <templateId>76</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Chlorhexidine</prescriptionName> 
       <prescriptionStrength>0.12</prescriptionStrength> 
       <prescriptionUnit>%</prescriptionUnit> 
       <prescriptionForm>MouthRinse 
       </prescriptionForm> 
       <prescriptionSignature>rinse mouth bid(withexpectoration) 
       </prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>1</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
      <TemplatePrescriptionData> 
       <id>32</id> 
       <noOfRefills>1</noOfRefills> 
       <templateId>79</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Norco</prescriptionName> 
       <prescriptionStrength>5/325</prescriptionStrength> 
       <prescriptionUnit>mg</prescriptionUnit> 
       <prescriptionForm>Tablet(s)</prescriptionForm> 
       <prescriptionSignature>1-2tabs po q4-6 hours, prn</prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>15</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
      <TemplatePrescriptionData> 
       <id>33</id> 
       <noOfRefills>2</noOfRefills> 
       <templateId>79</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Motrin 
       </prescriptionName> 
       <prescriptionStrength>600</prescriptionStrength> 
       <prescriptionUnit>mg</prescriptionUnit> 
       <prescriptionForm>Tablet(s)</prescriptionForm> 
       <prescriptionSignature>1tab po q6 hours,prn</prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>28</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
     </TemplateData> 
    </ns:return> 
</ns:fetchXmlResponse> 

代碼:

var xmlDoc=loadXMLString(Above XML file); 

//Then i'm fetching "ns:return" node(Which is also an XML file) 
var returnNode = String(xmlDoc.getElementsByTagName("ns:return")[0].childNodes[0].nodeValue); 

loadXMLString funciton

function loadXMLString(txt) 
{ 
if (window.DOMParser) 
    { 
    parser=new DOMParser(); 
    xmlDoc=parser.parseFromString(txt,"text/xml"); 
    } 
else // Internet Explorer 
    { 
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async=false; 
    xmlDoc.loadXML(txt); 
    } 

現在的問題是returnNode變量是有整體XMLFILE的只是4048字符inspite

樣品:

<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?> 
<TemplateData> 
    <TemplatePrescriptionData> 
     <id>24</id> 
     <noOfRefills>1</noOfRefills> 
     <templateId>67</templateId> 
     <templatePrescriptionMaintainanceId>0</templatePrescriptionMaintainanceId> 
     <prescriptionName>Norco</prescriptionName> 
     <prescriptionStrength>5/325</prescriptionStrength> 
     <prescriptionUnit>mg</prescriptionUnit> 
     <prescriptionForm>Tablet(s)</prescriptionForm> 
     <prescriptionSignature>1-2 tabs po q4-6 hours, prn 
     </prescriptionSignature> 
     <prescriptionWarnings></prescriptionWarnings> 
     <prescriptionComments></prescriptionComments> 
     <prescriptionQuantity>15</prescriptionQuantity> 
     <statusCode>true</statusCode> 
     <createDate>2009-07-22T00:00:00+05:30</createDate> 
     <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
    </TemplatePrescriptionData> 
    <TemplatePrescriptionData> 
     <id>25</id> 
     <noOfRefills>2</noOfRefills> 
     <templateId>67</templateId> 
     <templatePrescriptionMaintainanceId>0 
     </templatePrescriptionMaintainanceId> 
     <prescriptionName>Motrin </prescriptionName> 
     <prescriptionStrength>600</prescriptionStrength> 
     <prescriptionUnit>mg</prescriptionUnit> 
     <prescriptionForm>Tablet(s)</prescriptionForm> 
     <prescriptionSignature>1 tab po q6 hours, prn</prescriptionSignature> 
     <prescriptionWarnings></prescriptionWarnings> 
     <prescriptionComments></prescriptionComments> 
     <prescriptionQuantity>28</prescriptionQuantity> 
     <statusCode>true</statusCode> 
     <createDate>2009-07-22T00:00:00+05:30</createDate> 
     <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
    </TemplatePrescriptionData> 
    <TemplatePrescriptionData> 
     <id>26</id> 
     <noOfRefills>2</noOfRefills> 
     <templateId>67</templateId> 
     <templatePrescriptionMaintainanceId>0 
     </templatePrescriptionMaintainanceId> 
     <prescriptionName>Chlorhexidine</prescriptionName> 
     <prescriptionStrength>0.12</prescriptionStrength> 
     <prescriptionUnit>%</prescriptionUnit> 
     <prescriptionForm>Mouth Rinse</prescriptionForm> 
     <prescriptionSignature>rinse mouth bid (with expectoration) 
     </prescriptionSignature> 
     <prescriptionWarnings></prescriptionWarnings> 
     <prescriptionComments></prescriptionComments> 
     <prescriptionQuantity>1</prescriptionQuantity> 
     <statusCode>true</statusCode> 
     <createDate>2009-07-22T00:00:00+05:30</createDate> 
     <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
    </TemplatePrescriptionData> 
    <TemplatePrescriptionData> 
     <id>28</id> 
     <noOfRefills>1</noOfRefills> 
     <templateId>76</templateId> 
     <templatePrescriptionMaintainanceId>0 
     </templatePrescriptionMaintainanceId> 
     <prescriptionName>Norco</prescriptionName> 
     <prescriptionStrength>5/325</prescriptionStrength> 
     <prescriptionUnit>mg</prescriptionUnit> 
     <prescriptionForm>Tablet(s)</prescriptionForm> 
     <prescriptionSignature>1-2 tabs po q4-6 hours, prn 
     </prescriptionSignature> 
     <prescriptionWarnings></prescriptionWarnings> 
     <prescriptionComments></prescriptionComments> 
     <prescriptionQuantity>15</prescriptionQuantity> 
     <statusCode>true</statusCode> 
     <createDate>2009-07-22T00:00:00+05:30</createDate> 
     <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
    </TemplatePrescriptionData> 
    <TemplatePrescriptionData> 
     <id>30</id> 
     <noOfRefills>2</noOfRefills> 
     <templateId>76</templateId> 
     <templatePrescriptionMaintainanceId>0 
     </templatePrescriptionMaintainanceId> 
     <prescriptionName>Motrin </prescriptionName> 
     <prescriptionStrength>600</prescriptionStrength> 
     <prescriptionUnit>mg</prescriptionUnit> 
     <prescriptionForm>Tablet(s)</prescriptionForm> 
     <prescriptionSignature>1 tab po q6 hours, prn</prescriptionSignature> 
     <prescriptionWarnings></prescriptionWarnings> 
     <prescriptionComments></prescriptionComments> 
     <prescriptionQuantity>28</prescriptionQuantity> 
     <statusCode>true</statusCode> 
     <createDate>2009-07-22T00:00:00+05:30</createDate> 
     <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
    </TemplatePrescriptionData> 
    <TemplatePrescriptionData> 
     <id>31</id> 
     <noOfRefills>2</noOfRefills> 
     <templateId>76</templateId> 
     <templatePrescriptionMaintainanceId>0 
     </templatePrescriptionMaintainanceId> 
     <prescriptionName>Chlorhexidine</prescriptionName> 
     <prescriptionStrength>0.12</prescriptionStrength> 
     <prescriptionUnit>%</prescriptionUnit> 
     <prescriptionForm>Mouth Rinse</prescriptionForm> 
     <prescriptionSignature>rinse mouth bid (with expectoration) 
     </pr 

注:我曾嘗試與jQuery但首先它驗證數據並拋出Invalid XML例外。
我也驗證過這個文件,它在我的文件中顯示"The processing instruction target matching "[xX][mM][lL]" is not allowed."
任何人都可以幫助我解決這個問題,或者你可以建議我一些棘手的方式來處理這種類型的XML文件? XML中

+1

嘗試使用jQuery http://tech.pro/tutorial/877/xml-parsing-with-jquery –

+0

@VinodLouis沒有好友jQuery是禁止解析,這就是爲什麼問題是在這裏 – Jaykishan

+0

「禁止」是強大的工作......它有什麼問題? – ChrisW

回答

1

XML將是有問題的,除非它被包裹在<![CDATA[ ... ]]>這將讓你獲得內部XML作爲一個字符串,然後你可以解析...

var inner = xmlDoc.getElementsByTagName("return")[0].textContent; 

或刪除XML Processsing在解析之前從內部xml執行指令,如果外部XML也有匹配的PI,則可能需要更清楚些。

var d= ...your xml... 
d = d.replace("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" , ""); 
var xmlDoc = loadXMLString(d); 

var templateData = xmlDoc.getElementsByTagName("TemplateData"); 
+0

是的,這是一個不錯的選擇。我認爲這將工作,如果我使用jQuery的這個技巧 – Jaykishan