2012-10-31 9 views
1

적어도 내가 사용하는 언어 중 하나 이상 (바람직하게는 WebMatrix C#이 될 수 있음)을 사용하여 XML을 사용하는 방법을 알아야합니다. 이 JavaScript를 과거에 여러 번 사용했지만 StackOverflow 또는 다른 방법으로 온라인 예제가 없어도 실제로 나를 완벽하게 처리 할 수 ​​있습니다 (실제 XML 경험이 없다는 것을 명심하십시오. 물론 XPath에 대한 간단한 자습서를 작성해야합니다.) , XML 등을 포함하지만이 튜토리얼이 얼마나 짧고 불완전한 지 모두 압니다.)XML을 WebMatrix 면도칼 (C#)과 함께 사용하는 방법

이제 WebMatrix C#에서이 작업을 수행하고 싶습니다. 서버 측에서 처리하는 것이 관리하기가 쉽고 사용자가 더 빠르기 때문입니다. 나는이 코드를 사용하여 온라인 주어진 예제의 일부 사용하려고 할 때

는 :

@using System.Xml.Linq 
@{ 
    var file = XDocument.Load(Server.MapPath(@"/App_Code/Test.xml")); 
    var results = from e in file.Root.Elements() 
     select new { Name = e.Element("someValue").Value, Sales = e.Element("someValueTwo").Value }; 
    var grid = new WebGrid(results); 
} 

그리고 테스트 (난 정말 전혀 WebGrid를 사용할 필요가 없습니다를, 그냥 예에 있었다) Test.xml이라는 App_Code 폴더에 저장된 XML 문서.

XML 문서의 두 필드에서 일부 테스트 값을 읽으려고하면 오류가 발생합니다. 다음은 테스트 XML 문서입니다 :

<?xml version="1.0" encoding="utf-8" ?> 
<someNode> 
    <someValue>HEY THERE! I'M XML!</someValue> 
    <someValueTwo>Another Value</someValueTwo> 
</someNode> 

그리고 여기에 내가 더 아래로 cshtml 파일의 페이지에 값을 호출 할 곳이다 :

<p>This should be a fun test!<br/>And the value is...: 
     @foreach(var f in results) 
     { 
      <div>@f.Name</div> 
      <div>@f.Sales</div> 
     } 
    </p> 

마지막으로, 여기에 내가 오류입니다

Object reference not set to an instance of an object. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. 

Source Error: 


Line 4:  var file = XDocument.Load(Server.MapPath(@"/App_Code/Test.xml")); 
Line 5:  var results = from e in file.Root.Elements() 
Line 6:   select new { Name = e.Element("someValue").Value, Sales = e.Element("someValueTwo").Value }; 
Line 7:  var grid = new WebGrid(results); 
Line 8: } 

(6 호선이있다 : 나는 (이 점을 염두에 시험 또는 XML의 사용에 관한, 다른 데이터, 코드, 파일 [CS 또는 기타]를 유지하지 내 사이트 어디에서나 존재) 페이지를 실행 라인 오류)

내가 무엇이 누락 되었습니까? 예제는 실제로 이렇게 단순하지만 obv처럼 작동합니다. 그렇지 않습니다.

모든 정직한면에서 나는 XML을 사용하지 않고 내 목표를 달성하기 위해 WebMatrix에 대해 충분히 배웠다. (나는 항상 데이터베이스를 사용하거나 페이지를 렌더링 할 수 있었지만) 나는이 마크 업 언어에 약간 아팠다. 내가 사용하는 언어 (JavaScript, jQuery, C#)로 XML 파일을 읽을 수 없기 때문에 끊임없이 나를 피한다.

답변

2

나는 XmlDocument, XmlNodeXmlNodeList 클래스를 사용하여 더 많은 성공을 거두었으며 XPath를 사용하여 원하는 요소를 지정했습니다. 그러나이를 위해서는 XML 파일의 구조에 대해 어느 정도 알고 있어야합니다.

var file = XmlDocument.Load(Server.MapPath(@"/App_Code/Test.xml")); 
var results = file.SelectNodes("someNode/*") 

resultssomeNode 모든 하위 노드를 포함하는 XmlNodeList로 설정한다. results을 통해 XmlNodes 중 List으로 반복 할 수 있습니다. 그런 다음 각 노드에서 서브 노드를 얻기 위해 2 행에서 사용 된 것과 유사한 XPath 쿼리를 수행 할 수 있습니다.

의 XPath 구문 : http://msdn.microsoft.com/en-us/library/aa926473.aspx

나는 다음 대신 VB.net의 C#을 사용 사과,하지만 난

foreach(XmlNode aNode in results){ 
    string value = aNode.InnerText 
} 

이 안녕 "당신을 줄 것이다

foreach는 대한 VB의 구문에 익숙하지 않다 나는 XML이야! " someValue 노드의 경우\

편집 : 나는 다음 내 댓글에 링크 된 내용에 따라,이 시도 :

@using System.Xml.Linq 
@{ 
    var file = XmlDocument.Load(Server.MapPath(@"/App_Code/Test.xml")); 
    var results = file.SelectNodes("someNode/*"); 
     select new { Name = e.Element("someValue").Value, Sales = e.Element("someValueTwo").Value }; 
    /*Do something with each node*/ 
    foreach(XmlNode aNode in results) 
    { 
     string value = aNode.InnerText 
    } 
} 
+0

아, 걱정, 내가 VB.net 중 하나를 사용하지 않습니다. 나는 VB를 사용한다고 생각한 이유에 대해 궁금해하는 C#을 사용합니다. 그러나 저는 여러분의 대답을 좋아합니다. 그리고 여러분이 그 방법으로 더 많은 성공을 거둔다면, 저는 이해할 것입니다. 적어도 나 한테는 더 이해가가는 것 같아. – VoidKing

+0

WebMatrix에서 이와 같이 생각하지 않습니다 ... 시도해 주셔서 감사합니다 :) – VoidKing

+0

IntelliSense는 여기에 특정 메서드가 표시되지 않습니다. 즉, 존재하지 않거나 가져 오지 않았거나 범위를 벗어 났음을 의미합니다. – VoidKing

관련 문제