Я пытаюсь десериализовать файл XML, который является словарем sh с японского на английский, чтобы я мог отобразить информацию в форме Windows. Я до сих пор не слишком осведомлен о том, как XML и десериализация обычно работают, поэтому, пожалуйста, будьте терпеливы, если я ошибаюсь в терминологии.
Мой код десериализует словарь XML очень хорошо, и я могу получить доступ ко всей информации для каждой записи. Однако иногда я хочу получить доступ к некоторой информации, хранящейся в файле XML, в виде кода объекта (?), А не базового элемента (?), И я не знаю, как это сделать.
Вот пример того, что я имею в виду:
В файле XML тег <pos>
используется для хранения информации о части речи записи (прилагательное, существительное и т. Д.). Эта информация хранится в списке (из строки) для каждой отдельной записи (поскольку одна запись может записать более одной части речи.) Если бы я просматривал часть речевых данных для отдельной записи, это могло бы выглядеть следующим образом:
(0) "noun (common) (futsuumeishi)"
(1) "noun or participle which takes the aux. verb suru"
(2) "nouns which may take the genitive case particle `no'"
Теперь это многословно, и я не хочу, чтобы вся эта информация отображалась на экране. Я в порядке с сокращенным кодом, используемым в самом файле XML, который будет представлять три вышеуказанных элемента как &n;
, &vs;
и &adj-no;
соответственно. Когда десериализатор сталкивается с этими элементами, он переводит их в подробную форму, описанную в списке атрибутов в верхней части файла, а не в краткую форму, которую я хочу.
XML для одной конкретной записи содержащий эти теги pos
выглядит следующим образом:
<entry>
<ent_seq>1371320</ent_seq>
<k_ele>
<keb>水泳</keb>
<ke_pri>ichi1</ke_pri>
<ke_pri>news1</ke_pri>
<ke_pri>nf07</ke_pri>
</k_ele>
<r_ele>
<reb>すいえい</reb>
<re_pri>ichi1</re_pri>
<re_pri>news1</re_pri>
<re_pri>nf07</re_pri>
</r_ele>
<sense>
<!-- These are the tags I'm interested in -->
<pos>&n;</pos>
<pos>&vs;</pos>
<pos>&adj-no;</pos>
<gloss>swimming</gloss>
</sense>
...
...
</entry>
Вот фрагмент списка атрибутов, содержащий данные для тега pos
:
<!ENTITY adj-no "nouns which may take the genitive case particle `no'">
...
<!ENTITY n "noun (common) (futsuumeishi)">
...
<!ENTITY vs "noun or participle which takes the aux. verb suru">
Вот объект класса, который Я использую для десериализации элемент sense
, который содержит элемент pos
:
<Serializable()>
<XmlType("sense")>
Public Class SenseElement
<XmlElement("pos")>
Public Property PartOfSpeech As List(Of String)
<XmlElement("gloss")>
Public Property Gloss As List(Of GlossElement)
<XmlElement("stagk")>
Public Property SenseRestrictedToKeyword As List(Of String)
<XmlElement("stagr")>
Public Property SenseRestrictedToReading As List(Of String)
<XmlElement("xref")>
Public Property CrossReference As List(Of String)
<XmlElement("ant")>
Public Property Antonym As List(Of String)
<XmlElement("field")>
Public Property Field As List(Of String)
<XmlElement("dial")>
Public Property Dialect As List(Of String)
<XmlElement("s_inf")>
Public Property SenseInformation As List(Of String)
<XmlElement("misc")>
Public Property Misc As List(Of String)
<XmlElement("lsource")>
Public Property LanguageSource As List(Of LanguageSourceElement)
End Class
И, наконец, вот десериализатор:
Sub Deserialise()
Dim settings As XmlReaderSettings = New XmlReaderSettings
settings.DtdProcessing = DtdProcessing.Parse
Dim xmlPath As String = Path.Combine(Application.StartupPath, jmdictpath)
Dim serialiser As New XmlSerializer(GetType(JMdict))
Using rdr As Xml.XmlReader = Xml.XmlReader.Create(xmlPath, settings)
dict = CType(serialiser.Deserialize(rdr), JMdict)
End Using
End Sub
Итак, вопрос в том, как можно Извлечь краткую форму данных для тега pos
, содержащегося в файле XML, а не длинную форму, содержащуюся в списке атрибутов? Есть ли простое решение, чтобы сделать это? Я больше всего предпочел бы ответ на VB. NET, но пока решение объясняется достаточно хорошо, оно не слишком важно.
Также, пожалуйста, не стесняйтесь предлагать правки на этот вопрос, если я неправильно использованная терминология или иным образом неясная.