2013-04-17 3 views
7

У меня есть следующий XML:XDocument.Save() добавить нежелательные имена на каждом XElement

<?xml version="1.0" encoding="UTF-8"?> 
<tt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns="http://www.w3.org/ns/ttml" 
    xmlns:tt="http://www.w3.org/ns/ttml"  
    xmlns:tts="http://www.w3.org/ns/ttml#styling" 
    xmlns:ttp="http://www.w3.org/ns/ttml#parameter" xml:lang="fr-FR" 
    ttp:timeBase="smpte" ttp:frameRate="24" ttp:frameRateMultiplier="999 1000" ttp:dropMode="nonDrop"> 
    <head> 
    <styling> 
     <style xml:id="normal" tts:fontFamily="sansSerif" tts:fontWeight="normal" tts:fontStyle="normal" tts:color="white" tts:fontSize="100%"/> 
     <style xml:id="bold" tts:fontFamily="sansSerif" tts:fontWeight="bold" tts:fontStyle="normal" tts:color="white" tts:fontSize="100%"/> 
     <style xml:id="italic" tts:fontFamily="sansSerif" tts:fontWeight="normal" tts:fontStyle="italic" tts:color="white" tts:fontSize="100%"/> 
     <style xml:id="bolditalic" tts:fontFamily="sansSerif" tts:fontWeight="bold" tts:fontStyle="italic" tts:color="white" tts:fontSize="100%"/> 
    </styling> 

Когда я загрузить его с XDocument.Load() затем сохранить его с XDocument.Save() без каких-либо изменений, то новый файл XML я имею в следует:

<?xml version="1.0" encoding="utf-8"?> 
<tt:tt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://www.w3.org/ns/ttml" xmlns:tt="http://www.w3.org/ns/ttml" 
     xmlns:tts="http://www.w3.org/ns/ttml#styling" 
     xmlns:ttp="http://www.w3.org/ns/ttml#parameter" 
     xml:lang="fr-FR" ttp:timeBase="smpte"  ttp:frameRate="24" ttp:frameRateMultiplier="999 1000" ttp:dropMode="nonDrop"> 
    <tt:head> 
    <tt:styling> 
     <tt:style xml:id="normal" tts:fontFamily="sansSerif" tts:fontWeight="normal"  tts:fontStyle="normal" tts:color="white" tts:fontSize="100%" /> 
     <tt:style xml:id="bold" tts:fontFamily="sansSerif" tts:fontWeight="bold"  tts:fontStyle="normal" tts:color="white" tts:fontSize="100%" /> 
     <tt:style xml:id="italic" tts:fontFamily="sansSerif" tts:fontWeight="normal"  tts:fontStyle="italic" tts:color="white" tts:fontSize="100%" /> 
     <tt:style xml:id="bolditalic" tts:fontFamily="sansSerif" tts:fontWeight="bold"  tts:fontStyle="italic" tts:color="white" tts:fontSize="100%" /> 
    </tt:styling> 

Есть ли элегантный способ загрузить и сохранить этот вид XML без изменения чего-либо?

Спасибо!

+1

Почему у вас Xmlns = «http://www.w3.org/ns/ttml» и Xmlns: тт = "http://www.w3.org/ns/ttml"? По умолчанию пространство имен (xmlns) должно быть достаточно, не нужно xmlns: tt Я думаю, – Pascal

+1

Это хороший вопрос, мне просто нужно заново создать файл, который вот так. – nywhere

ответ

4

Как сказал Паскаль, проблема исходит от xmlns="w3.org/ns/ttml" и xmlns:tt="w3.org/ns/ttml". Я думаю, XDocument.Save сгенерирует этот xml, потому что пространство имен xml по умолчанию дублируется с другим пространством имен. (Пространства имен, возможно, более идентифицированы valeu, чем ключом)

Первый вариант - удалить дубликат в исходном файле. Используя эту новую версию, у вас не возникнут проблемы.

<?xml version="1.0" encoding="UTF-8"?> 
<tt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns="http://www.w3.org/ns/ttml"  
    xmlns:tts="http://www.w3.org/ns/ttml#styling" 
    xmlns:ttp="http://www.w3.org/ns/ttml#parameter" xml:lang="fr-FR" 
    ttp:timeBase="smpte" ttp:frameRate="24" ttp:frameRateMultiplier="999 1000" ttp:dropMode="nonDrop"> 
    <head> 
    <styling> 
     <style xml:id="normal" tts:fontFamily="sansSerif" tts:fontWeight="normal" tts:fontStyle="normal" tts:color="white" tts:fontSize="100%"/> 
     <style xml:id="bold" tts:fontFamily="sansSerif" tts:fontWeight="bold" tts:fontStyle="normal" tts:color="white" tts:fontSize="100%"/> 
     <style xml:id="italic" tts:fontFamily="sansSerif" tts:fontWeight="normal" tts:fontStyle="italic" tts:color="white" tts:fontSize="100%"/> 
     <style xml:id="bolditalic" tts:fontFamily="sansSerif" tts:fontWeight="bold" tts:fontStyle="italic" tts:color="white" tts:fontSize="100%"/> 
    </styling> 

Второй вариант заключается в удалении дубликатов имен где-то до того, как сохранить

doc.Root.Attributes(XName.Get("tt", @"http://www.w3.org/2000/xmlns/")).Remove(); 

 Смежные вопросы

  • Нет связанных вопросов^_^