문제

저는 Microsoft Visual C# 2008 Express에서 일하고 있습니다.

문자열이 있고 문자열의 내용이 다음과 같이 가정 해 봅시다. "This is my <myTag myTagAttrib="colorize">awesome</myTag> string."

나는 "굉장한"이라는 단어에 무언가를하고 싶다고 스스로에게 말하고있다.

C#의 가장 좋은 방법은이 태그가 존재한다는 것을 감지하고 그 속성을 얻는 가장 좋은 방법은 무엇입니까? 나는 일했다 조금 XELEMENTS 및 C#을 사용하지만 대부분 XML 파일 및 출력과 관련이 있습니다.

감사!

-에이나

도움이 되었습니까?

해결책

다른 해결책 :

var myString = "This is my <myTag myTagAttrib='colorize'>awesome</myTag> string.";
try
{
    var document = XDocument.Parse("<root>" + myString + "</root>");
    var matches = ((System.Collections.IEnumerable)document.XPathEvaluate("myTag|myTag2")).Cast<XElement>();
    foreach (var element in matches)
    {
        switch (element.Name.ToString())
        {
            case "myTag":
                //do something with myTag like lookup attribute values and call other methods
                break;
            case "myTag2":
                //do something else with myTag2
                break;
        }
    }
}
catch (Exception e)
{
    //string was not not well formed xml
}

또한 여러 요소에 대한 여러 속성을 구문 분석하려는 Dabblernl에 대한 귀하의 의견을 고려했습니다.

다른 팁

정규 표현식으로 XML을 추출하고 추출 된 XML 문자열을 Xlement에로드하고 거기에서 이동할 수 있습니다.

string text=@"This is my<myTag myTagAttrib='colorize'>awesome</myTag> text.";
Match match=Regex.Match(text,@"(<MyTag.*</MyTag>)");
string xml=match.Captures[0].Value;
XElement element=XElement.Parse(xml);
XAttribute attribute=element.Attribute("myTagAttrib");
if(attribute.Value=="colorize") DoSomethingWith(element.Value);// Value=awesome

이 코드는 MyTag 요소가 발견되지 않은 경우 예외를 던지지 만 다음 행을 삽입하여 해결할 수 있습니다.

if(match.Captures.Count!=0)
{...}

문자열이 MyTag 태그 이상을 유지할 수 있다면 더욱 흥미로워집니다 ...

문자열 (텍스트 내용), 태그 및 속성 사이를 전환하기 때문에 예제에 대해 약간 혼란스러워합니다. 그러나 나는 당신이 원하는 것이 Xpath라고 생각합니다.

따라서 XML 스트림이 다음과 같습니다.

u003Cadeena/>u003Cparent>u003Cchild x="this is my awesome string">이것은 또 다른 멋진 문자열입니다u003Cchild/>u003Cadeena/>

속성을 찾기 위해 이와 같이 보이는 xpath 표현식을 사용합니다.

// child/@x

그리고 자식 태그에서 텍스트 값을 찾기 위해 이와 같은 것입니다.

//어린이

저는 Java 개발자 이므로이 작업을 수행하는 데 어떤 XML 라이브러리가 사용되었는지 모르겠습니다. 그러나 XML 파일을 읽은 다음 XPath를 사용하여 값을 뽑아 W3C 문서 클래스 인스턴스를 만들려면 DOM 파서가 필요합니다.

좋은 것이 있습니다 W3C 학교의 XPath 튜토리얼 필요하다면.

업데이트:

당신이 이미 XML 스트림을 문자열로 가지고 있다고 말하고 있다면, 대답은 파일에서 읽지 않고 문자열 자체에서 읽는 것입니다. Java는 각각 바이트와 숯의 스트림을 처리하는 InputStream 및 Reader라는 추상화를 가지고 있습니다. 소스는 파일, 문자열 등이 될 수 있습니다. C# dom api를 점검하여 비슷한 것이 있는지 확인하십시오. 당신은 당신이 조작 할 수있는 dom 객체를 돌려 줄 파서에 문자열을 전달합니다.

입력이 잘 형성되지 않았으므로 XML 내장 된 XML 라이브러리와 구문 분석 할 수 없습니다. 잘 형성된 조각을 추출하려면 정규 표현이 필요합니다. 아마도 더 용서하는 HTML 파서 중 하나를 사용할 수 있습니다. htmlagilitypack CodePlex에서.

그만큼 XmlTextReader 특수 생성자로 XML 조각을 구문 분석 할 수 있습니다 5월 이 상황에 도움이되지만 나는 그것에 대해 긍정적이지 않습니다.

여기에는 심층적 인 기사가 있습니다.

http://geekswithblogs.net/kobush/archive/2006/04/20/75717.aspx

이것은 Regex를 사용하여 모든 유형의 XML과 일치하는 솔루션입니다.C# XML을 감지하는 더 나은 방법?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top