2013-02-09 3 views
1

이것은 매우 간단 할 것입니다. 그러나 이렇게하는 방법을 찾을 수 없습니다.큰 문자열에서 한 단어를 반환하는 방법

Bing Maps 서비스를 사용하여 위도/경도로 도시 이름을 가져 왔습니다.

그것은 나에게 나는이 같은 문자열로 다운로드 한 XML 많은 양의 제공 :

<Name> 
High Street, Lincoln, LN5 7 
</Name> 
<Point> 
<Latitude> 
53.226592540740967 
</Latitude> 
<Longitude> 
-0.54169893264770508 
</Longitude> 
</Point> 
<BoundingBox> 
<SouthLatitude> 
53.22272982317029 
</SouthLatitude> 
<WestLongitude> 
-0.55030130347707928 
</WestLongitude> 
<NorthLatitude> 
53.230455258311643 
</NorthLatitude> 
<EastLongitude> 
-0.53309656181833087 
</EastLongitude> 
</BoundingBox> 
<EntityType> 
Address 
</EntityType> 
<Address> 
<AddressLine> 
High Street 
</AddressLine> 
<AdminDistrict> 
England 
</AdminDistrict> 
<AdminDistrict2> 
Lincs 
</AdminDistrict2> 
<CountryRegion> 
United Kingdom 
</CountryRegion> 
<FormattedAddress> 
High Street, Lincoln, LN5 7 
</FormattedAddress> 
<Locality> 
Lincoln 
</Locality> 
<PostalCode> 
LN5 7 
</PostalCode> 
</Address> 

바로이 개 지역 태그 사이에있는 도시 이름을 얻기의 간단한 방법이 있나요를?

+0

정규 표현식 예를 들어, 당신의 친구입니다 : 여기

string locality = XElement.Load(new StringReader("<Root>"+xml+"<Root>")).XPathSelectElement("Address/Locality").Value.Trim(); 

그리고는 적절한 예입니다 (.? *) N \ "@ \ n" – reinder

+0

안녕 reinder, 그 정규식이 작동하지 않았다 – samil90

답변

0

간단한 방법을 얻을하려는 string.IndexOf 방법

// I have saved your xml in this file to test 
string xmlResult = File.ReadAllText(@"D:\temp\locality.txt"); 

int startPos = xmlResult.IndexOf("<Locality>"); 
int endPos = xmlResult.IndexOf("</Locality>"); 

if(endPos != -1 && startPos != -1) 
{ 
    string result = xmlResult.Substring(startPos + 10, endPos-startPos-10).Trim(); 
    Console.WriteLine(result); 
} 

의 사용을 통해이

const string HTML_TAG_PATTERN = "<.*?>"; 

static string StripHTML(string inputString) 
     { 
      return Regex.Replace 
       (inputString, HTML_TAG_PATTERN, string.Empty); 
     } 

전화를 시도 용어 <Locality>을 검색 한 다음 용어 </Locality>을 검색하십시오. 문자열에 용어가있는 경우 Substring 메서드를 사용하여 필요한 부분을 추출합니다. (10은 <Locality> 용어의 길이입니다.)

사이드 노트. 예제는 매우 간단하지만 정규식을 사용하여 XML 또는 HTML 파일을 구문 분석하는 것은 바람직하지 않습니다. 엄격하게 귀하의 질문에 관련되어 있지 않지만, this famous answer (대부분은 너무 upvoted 중 하나) 왜 정규 표현식 이외의 구문 분석하는 데 사용하는 좋은 생각이 아니라고 설명합니다.

하나의 문제가있는 경우 Regex 후에 두 가지 문제가 발생합니다.

+0

이것은 완벽하게 잘됐다. – samil90

+0

-1 xml을 구문 분석하기 위해 문자열 연산을 사용합니다. –

0

정규 표현식의 문자열로 사용할 상수 문자열 변수를 만들어이 작업을 수행 할 수 있습니다. 당신은 문자열의 종류를 분석하기 위해 도시 이름

string cityname = StripHTML(the code); 
+0

안녕하세요 nrsharma, 답장을 보내 주셔서 감사합니다. RegEx에 익숙하지 않다. 패턴이 작동하지 않고 전체 String을 반환했다. – samil90

+0

XML 노드로 루프를 돌린 다음 StripHTML (값)을 하나씩 함수에 전달해야한다. 그것은 당신에게 정확한 가치를 줄 것입니다. – nrsharma

3

저는 인덱스와 같은 정규 표현식을 사용하는 사람들에게 실제로 놀랍습니다. XML을 f.ex처럼 처리하면 불쾌한 놀라움을 선사 할 수 있습니다. Bing이 CData를 사용하기로 결정하면.

.NET 다행히도 사용하기 그냥 쉽게 XML에 대한 아주 좋은 지원을하고있다, 그래서 나는 항상을 사용하십시오 : 당신은 아마에 대한 네임 스페이스 해결을 선언해야합니다

XmlDocument doc = new XmlDocument(); 
doc.LoadXml(xml); 
var nav = doc.CreateNavigator(); 
var iterator = nav.Select(@"//Locality"); 
while (iterator.MoveNext()) 
{ 
    Console.WriteLine("{0}", iterator.Current.InnerXml.Trim()); 
} 

주 Bing이 사용하는 xmlns입니다. XML의 해당 부분이 없으므로이 예제에서는 추가 할 수 없지만 이러한 사항은 쉽게 추가 할 수 있습니다.

0

적절한 XML 구문 분석을 사용하는 것이 좋습니다. 그러나 XML 문서는 여러 개의 루트 노드를 가지고 있으므로 XML 문서로 사용하기에 적합하지 않습니다. 그래도 쉽게 해결할 수 있습니다.

XML 구문 분석을 사용하면 임의의 구문 분석없이 모든 다른 데이터를 쉽게 얻을 수 있습니다.여기

당신의 XML이있는 가정합니다 한 줄 예제 :

이 할 너무 쉽게, 그리고 훨씬 더 강력 할 수 있다면 압연 - 네 - 자신의 XML 파싱 코드를하는 것은 정말 사용해야하는보다 문자열 변수라는 XML :

using System; 
using System.IO; 
using System.Xml.Linq; 
using System.Xml.XPath; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // Fix original XML, which has multiple root nodes! 
      // We fix it just by enclosing it in a root level element called "Root": 

      string xml = "<Root>" + originalXml() + "</Root>"; 

      // Read the XML as an XML element. 

      var xElement = XElement.Load(new StringReader(xml)); 

      // Easily access 'Locality' or any other node by name: 

      string locality = xElement.XPathSelectElement("Address/Locality").Value.Trim(); 
      Console.WriteLine("Locality = " + locality); 
     } 

     // Note: This XML isn't well-formed, because it has multiple root nodes. 

     private static string originalXml() 
     { 
      return 
@"<Name> 
High Street, Lincoln, LN5 7 
</Name> 
<Point> 
<Latitude> 
53.226592540740967 
</Latitude> 
<Longitude> 
-0.54169893264770508 
</Longitude> 
</Point> 
<BoundingBox> 
<SouthLatitude> 
53.22272982317029 
</SouthLatitude> 
<WestLongitude> 
-0.55030130347707928 
</WestLongitude> 
<NorthLatitude> 
53.230455258311643 
</NorthLatitude> 
<EastLongitude> 
-0.53309656181833087 
</EastLongitude> 
</BoundingBox> 
<EntityType> 
Address 
</EntityType> 
<Address> 
<AddressLine> 
High Street 
</AddressLine> 
<AdminDistrict> 
England 
</AdminDistrict> 
<AdminDistrict2> 
Lincs 
</AdminDistrict2> 
<CountryRegion> 
United Kingdom 
</CountryRegion> 
<FormattedAddress> 
High Street, Lincoln, LN5 7 
</FormattedAddress> 
<Locality> 
Lincoln 
</Locality> 
<PostalCode> 
LN5 7 
</PostalCode> 
</Address>"; 
     } 
    } 
} 
관련 문제