2012-02-28 19 views
0

私は巨大なXMLファイルを持っており、その中のいくつかのノードはオプションです。私はそれから入札者の情報を引き出すことができません、誰もこれで助けてください。 xmlファイルの最初の2つのレコードは巨大なxmlファイル内のオプションのXMLノードから値を読み取る

<reports> 
<report> 

<xml-report> 
<summary> 
<dr-nbr>2012004</dr-nbr> 
</summary> 
<data> 
<proj-title> 
<title-code> 
<title ci = "N">District 321</title> 
</title-code> 
</proj-title> 
<p-location> 
<project-location> 
<title-code> 
<p-county-name ci = "N">BOOLE</p-county-name> 
<p-fips-county>MT101</p-fips-county> 
<p-city-name ci = "N">MTELBY</p-city-name> 
<p-state-id ci = "N">MT</p-state-id> 
<p-zip-code ci = "N">69474</p-zip-code> 
<p-zip-code5 ci = "N">69474</p-zip-code5> 
<p-country-id ci = "N">USA</p-country-id> 
</title-code> 
</project-location> 
<pct-project-county> 
<title-code> 
<p-county-name ci = "N">TOOLE</p-county-name> 
<p-fips-county>MT101</p-fips-county> 
<p-state-id>MT</p-state-id> 
<p-country-id>USA</p-country-id> 
</title-code> 
</pct-project-county> 
</p-location> 
<status> 
<title-code> 
<status-proj-dlvry-sys ci = "N">Design-Bid-Build</status-proj-dlvry-sys> 
</title-code> 
</status> 
</data> 
</xml-report> 
</report> 

<report> 
<xml-report> 
<summary> 
<dr-nbr>2011005</dr-nbr> 
</summary> 
<data> 
<proj-title> 
<title-code> 
<title ci = "N">Plane Pitch</title> 
</title-code> 
</proj-title> 
<p-location> 
<project-location> 
<title-code> 
<p-county-name ci = "A">SUMMIT</p-county-name> 
<p-fips-county>MI153</p-fips-county> 
<p-city-name ci = "A">AVON</p-city-name> 
<p-state-id ci = "A">MI</p-state-id> 
<p-zip-code ci = "C">44308</p-zip-code> 
<p-zip-code5 ci = "C">44308</p-zip-code5> 
<p-country-id ci = "A">USA</p-country-id> 
</title-code> 
</project-location> 
<pct-project-county> 
<title-code> 
<p-county-name ci = "A">SUMMIT</p-county-name> 
<p-fips-county>OH153</p-fips-county> 
<p-state-id>OH</p-state-id> 
<p-country-id>USA</p-country-id> 
</title-code> 
</pct-project-county> 
</p-location> 

<project-bidder-information> 
<title-code> 
<bid-header> 
<bid-header-desc ci = "N">Low Bidders</bid-header-desc> 
<bid-title> 
<bid-details> 
<contact-information> 
<firm-name>Many Stocks</firm-name> 
<contact-name>Many Moree</contact-name> 
</contact-information> 
</bid-details> 
<bid-details> 
<contact-information> 
<firm-name>Who Constrcution</firm-name> 
</contact-information> 
</bid-details> 
</bid-title> 
</bid-header> 
</title-code> 
</project-bidder-information> 
</data> 
</xml-report> 
</report> 

</reports> 


'my Code ************ 

Dim xtr As New XmlTextReader("C:\Test2.xml") 
xtr.WhitespaceHandling = WhitespaceHandling.None 

Dim X As New XmlDocument() 
X.Load(xtr) 

If Not (X Is Nothing) Then 
Try 
Dim ArticleList As XmlNodeList = X.SelectNodes("reports/report/xml-report") 
For Each Article As XmlNode In ArticleList 

Response.Write("**************New Record**********") 
Response.Write("<br />") 

Try 
Dim CatNodesList As XmlNodeList = Article.SelectNodes("summary/dr-nbr") 
Dim ProjectID As String 
For Each category As XmlNode In CatNodesList 
If category IsNot Nothing Then 
Response.Write("Project No:" & category.InnerText) 
ProjectID = category.InnerText 
Response.Write("<br />") 

End If 
Next 

Dim ProjectBidCompanyNodsList As XmlNodeList = Article.SelectNodes("data/project-bidder-informaton/title-code/bid-header/bid-title/bid-details/contact-information/firm-name") 
For Each ProjCompanyNode As XmlNode In ProjectBidCompanyNodsList 

If ProjCompanyNode IsNot Nothing Then 
Response.Write("Bid Company:" & ProjCompanyNode.Value) 
Response.Write("<br />") 
End If 
Next 

Catch ex As Exception 
Response.Write(ex) 
Response.Write("<br />") 
End Try 
Next 
Catch ex As Exception 
Response.Write(ex) 
End Try 
End If 

の下に与えられて、私は私が間違って何をやっている、2段目にある入札企業ではないプロジェクトはありません(DR-NBR)を引くことができていますが。

+0

はどのように 'プル' に入札者情報をしようとしていますか?郵便番号。 – Dan675

+0

例外の直前の上記のコードでは、入札者情報のコードです。私はここのコメントに再投稿できません – user745708

+0

「巨大な」という単語は無意味です。それは5Mbから200Gbまでを意味する可能性があります。答えは、このスペクトルのさまざまな端では異なることがあります。 –

答えて

0

LINQ to XMLを使用してください。はるかに簡単です。 C#の例:

public class XmlParser 
{ 
    public void Parse(string xml) 
    { 
     XDocument xDocument = XDocument.Parse(xml); 
     XElement bidderInformation = xDocument.Descendants("project-bidder-information").FirstOrDefault(); 
     Console.WriteLine(bidderInformation); 
    } 
} 

収量:

<project-bidder-information> 
    <title-code> 
    <bid-header> 
     <bid-header-desc ci="N">Low Bidders</bid-header-desc> 
     <bid-title> 
     <bid-details> 
      <contact-information> 
      <firm-name>Many Stocks</firm-name> 
      <contact-name>Many Moree</contact-name> 
      </contact-information> 
     </bid-details> 
     <bid-details> 
      <contact-information> 
      <firm-name>Who Constrcution</firm-name> 
      </contact-information> 
     </bid-details> 
     </bid-title> 
    </bid-header> 
    </title-code> 
</project-bidder-information> 
+0

申し訳ありません。このLinqを使ってファイルを読むと、エラーが発生します。ルートレベルのデータは無効です。 Line 1、position 1 – user745708

+0

整形式のXMLを渡していることを確認する必要があります。 –

+0

これはサードパーティのファイルであり、xmlが整形式であると言います。これを処理するために何かできることはありますか、あなたの時間を感謝します。また、dr-nbr(ProjectNO)とCompany Name 1とCompany Name 2を順番に取得する方法もあります。 – user745708

関連する問題