我在創建適當的類來反序列化 xml 檔案時遇到問題。xml 結構如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" target-language="pl" datatype="plaintext" original="1112">
<body>
<group id="90362">
<trans-unit id="90362::aff_11">
<source>text 1 1</source>
<target>text 1 1</target>
</trans-unit>
<trans-unit id="90362::aff_12">
<source>text 1 2</source>
<target>text 1 2</target>
</trans-unit>
<trans-unit id="90362::aff_13">
<source>text 1 3</source>
<target>text 1 3</target>
</trans-unit>
</group>
<group id="90392">
<trans-unit id="90392::aff_21">
<source>text 2 1</source>
<target>text 2 1</target>
</trans-unit>
<trans-unit id="90392::aff_22">
<source>text 2 2</source>
<target>text 2 2</target>
</trans-unit>
<trans-unit id="90392::aff_23">
<source>text 2 3</source>
<target>text 2 3</target>
</trans-unit>
</group>
</body>
</file>
</xliff>
如您所見,我們在陣列中嵌套了陣列。此外,其中一個陣列的名稱不能為該類賦予相同的名稱。預先創建的類:
[XmlRoot("xliff", Namespace = "urn:oasis:names:tc:xliff:document:1.2")]
public class xliff
{
public file file { get; set; }
}
public class file
{
public body body { get; set; }
}
public class body : List<group>
{
public List<group> groups { get; set; }
}
public class group //: List<trans>
{
public List<trans> trans { get; set; }
}
public class trans
{
[XmlElement("source")]
public string source { get; set; }
[XmlElement("target")]
public string target { get; set; }
}
不幸的是,我在完成類以獲取源值和目標值時遇到問題。
uj5u.com熱心網友回復:
您可以使用在線工具將 XML 轉換為 c# 模型:https ://json2csharp.com/xml-to-csharp
嘗試使用此模型(由上述工具生成):
// using System.Xml.Serialization;
// XmlSerializer serializer = new XmlSerializer(typeof(Xliff));
// using (StringReader reader = new StringReader(xml))
// {
// var test = (Xliff)serializer.Deserialize(reader);
// }
[XmlRoot(ElementName="trans-unit")]
public class Transunit {
[XmlElement(ElementName="source")]
public string Source { get; set; }
[XmlElement(ElementName="target")]
public string Target { get; set; }
[XmlAttribute(AttributeName="id")]
public string Id { get; set; }
[XmlText]
public string Text { get; set; }
}
[XmlRoot(ElementName="group")]
public class Group {
[XmlElement(ElementName="transunit")]
public List<Transunit> Transunit { get; set; }
[XmlAttribute(AttributeName="id")]
public int Id { get; set; }
[XmlText]
public string Text { get; set; }
}
[XmlRoot(ElementName="body")]
public class Body {
[XmlElement(ElementName="group")]
public List<Group> Group { get; set; }
}
[XmlRoot(ElementName="file")]
public class File {
[XmlElement(ElementName="body")]
public Body Body { get; set; }
[XmlAttribute(AttributeName="source-language")]
public string SourceLanguage { get; set; }
[XmlAttribute(AttributeName="target-language")]
public string TargetLanguage { get; set; }
[XmlAttribute(AttributeName="datatype")]
public string Datatype { get; set; }
[XmlAttribute(AttributeName="original")]
public int Original { get; set; }
[XmlText]
public string Text { get; set; }
}
[XmlRoot(ElementName="xliff")]
public class Xliff {
[XmlElement(ElementName="file")]
public File File { get; set; }
[XmlAttribute(AttributeName="version")]
public DateTime Version { get; set; }
[XmlAttribute(AttributeName="xmlns")]
public string Xmlns { get; set; }
[XmlText]
public string Text { get; set; }
}
uj5u.com熱心網友回復:
你不應該繼承自List<T>. 相反,選擇了composition 而不是繼承,這意味著您的body-class具有一組組,而您的body-class是這樣的集合。
所以你可以改用這個結構:
[XmlRoot("xliff", Namespace = "urn:oasis:names:tc:xliff:document:1.2")]
public class xliff
{
public file file { get; set; }
}
public class file
{
public body body { get; set; }
}
public class body
{
[XmlElement("group")]
public List<group> groups { get; set; }
}
public class group
{
[XmlElement("trans")]
public List<trans> trans { get; set; }
}
public class trans
{
[XmlElement("source")]
public string source { get; set; }
[XmlElement("target")]
public string target { get; set; }
}
此外,您應該考慮為您的課程使用 PascalCase。要在序列化的 xml 中為這些類賦予不同的名稱,您可以使用 xml 屬性,例如:
[XmlRott("body")]
public class Body
uj5u.com熱心網友回復:
XLIFF 遠比這復雜得多,并且具有更多的元素。當前版本是 2.1,但在OASIS 站點中也描述了較舊的 1.2 ,以及XSD 模式的鏈接。
幾乎所有標準化的 XML 檔案都基于 XML 模式,可作為 XSD 檔案(XML 模式定義)使用。
您可以使用該xsd.exe工具從 XSD 檔案生成 C# 類。http://docs.oasis-open.org/xliff/v1.2/cs02/xliff-core-1.2-strict.xsd您可以在本地下載例如xliff.xsd,然后執行
xsd xliff.xsd /c
生成xliff.cs包含所有類的檔案。
結果超過 1000 行,所以不能在這里粘貼。
從檔案復制的樹結構有很多元素:
<xliff>1
| |
| --- [Extension Point]
| |
--- <file>
|
--- <header>?
| |
| --- <skl>?
| | |
| | --- (<internal-file> | <external-file>)1
| |
| --- <phase-group>?
| | |
| | --- <phase>
| | |
| | --- <note>*
| |
| --- <glossary>*
| | |
| | --- (<internal-file> | <external-file>)1
| |
| --- <reference>*
| | |
| | --- (<internal-file> | <external-file>)1
| |
| --- <count-group>*
| | |
| | --- <count>*
| |
| --- <tool>*
| | |
| | --- [Extension Point]
| |
| --- <prop-group>*
| | |
| | --- <prop>*
| |
| --- [Extension Point]
| |
| --- <note>*
|
--- <body>1
|
--- <group>*
| |
| --- <context-group>*
| | |
| | --- <context>
| |
| --- <count-group>*
| | |
| | --- <count>*
| |
| --- <prop-group>*
| | |
| | --- <prop>*
| |
| --- [Extension Point]
| |
| --- <note>*
| |
| --- At least one of: (<group>* <trans-unit>* <bin-unit>*)
|
--- <trans-unit>*
| |
| --- <source>1
| | |
| | --- [Inline Elements]
| |
| --- <target>?
| | |
| | --- [Inline Elements]
| |
| --- <context-group>*
| | |
| | --- <context>
| |
| --- <count-group>*
| | |
| | --- <count>*
| |
| --- <prop-group>*
| | |
| | --- <prop>*
| |
| --- <seg-source>?
| | |
| | --- [Inline Elements]
| |
| --- [Extension Point]
| |
| --- <note>*
| |
| --- <alt-trans>*
| |
| --- <context-group>*
| | |
| | --- <context>
| |
| --- <source>?
| | |
| | --- [Inline Elements]
| | | --- <target>
| | |
| | --- [Inline Elements]
| |
| --- <prop-group>*
| | |
| | --- <prop>*
| |
| --- <seg-source>?
| | |
| | --- [Inline Elements]
| |
| --- [Extension Point]
| |
| ---- <note>*
|
--- <bin-unit>*
|
--- <bin-source>1 & <bin-target>?
| |
| --- (<internal-file> | <external-file>)1
|
--- <context-group>*
| |
| --- <context>
|
--- <count-group>*
| |
| --- <count>*
|
--- <prop-group>*
| |
| --- <prop>*
|
--- [Extension Point]
|
--- <note>*
|
--- <trans-unit>*
Struct_Extension_Elements
Inline Elements:
--- --- <ph>*
| |
| --- <sub>*
| |
| --- [Inline Elements]
|
--- <it>*
| |
| --- <sub>*
| |
| --- [Inline Elements]
|
--- <bpt>*
| |
| --- <sub>*
| |
| --- [Inline Elements]
|
--- <ept>*
| |
| --- <sub>*
| |
| --- [Inline Elements]
|
--- <g>*
| |
| --- [Inline Elements]
|
--- <x/>*
| |
| --- [Inline Elements]
|
--- <bx/>*
| |
| --- [Inline Elements]
|
--- <ex/>*
| |
| --- [Inline Elements]
|
--- <mrk>*
|
--- [Inline Elements]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/415618.html
標籤:
