2017-02-13 5 views
1

나는 아래의 XML 직렬화하기 위해 노력하고있어 그것을 포장하지 않고 가치를 속성 : 나는 마법처럼 XmlSerializer 작품 아래처럼 클래스를 감을 때는C# XML를 비 직렬화 클래스

<venue href="http://SomeUrl"> 
    <location id="ABC"/> 
    <title>Some title</title> 
</venue> 

[XmlRoot(ElementName = "venue")] 
public class VenueModel 
{ 
    [XmlElement("location")] 
    public Location Location; 

    [XmlElement("title")] 
    public string Title; 

    [XmlAttribute("href")] 
    public string Href; 
} 

public class Location 
{ 
    [XmlAttribute("id")] 
    public string Id; 
} 

그러나 제 의견으로는 Location에서 간단한 문자열을 별도의 클래스로 래핑하는 것은 상당히 지루한 해결책입니다. 내가 성취하고자하는 것은 아래와 같이 단순한 평평한 모형을 만드는 것입니다 :

[XmlRoot(ElementName = "venue")] 
public class VenueModel2 
{ 
    [SomeMagicAttribute] 
    public string LocationId; 

    [XmlElement("title")] 
    public string Title; 

    [XmlAttribute("href")] 
    public string Href; 
} 

그래서 첫 번째 질문은? C# System.Xml.Serialization을 사용하면 가능합니까? 그렇다면이 데이터를 얻는 데 필요한 마법 속성은 무엇입니까? 내가 처음 내가 입력 XML로 (아래와 같이) XSL 변환을 적용 할 필요가 있다는 것입니다 발견 한 것은

+0

클래스 위치가 누락되었습니다. 텍스트 : [XmlText] public string Text {get; 세트; } 그렇지 않으면 의 값을 읽을 수 없습니다. –

+0

위치에 텍스트 값이 없습니다. ID로 보내기 속성 만 포함합니다. 이것은 – Misiakw

+0

을 위해 설계된 유일한 것입니다.이 경우 속성이 아니라 locationid 값이어야합니다. 하지만 네가 이걸 바꿀 수 없다고 생각해? –

답변

0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" encoding="utf-8" indent="no"/> 
     <xsl:template match="/"> 
      <venue> 
      <href><xsl:value-of select="/venue/@href" /></href> 
      <locationId><xsl:value-of select="/venue/location/@id" /></locationId> 
      <title><xsl:value-of select="/venue/title" /></title> 
      </venue> 
    </xsl:template> 
</xsl:stylesheet> 

후 출력 XML은 다음과 같습니다 할 수있는 것보다

<venue> 
    <href>SomeUrl</href> 
    <locationId>ABC</locationId> 
    <title>Some title</title> 
</venue> 

하는 내가 원하는 형식으로 탈 직렬화 될 수 있습니다. C# 코드에서이 번역을 적용하려면 여기를 참조하십시오. C# How to perform a live xslt transformation on an in memory object?