2013-11-01 4 views
0

Я не часто использую XML, но мне нужно настроить некоторые данные. Я разместил строку ниже из блокнота ++. Мне нужно удалить целые строки, где LoanID - это дубликат. Файлы содержат около 200 000 строк, где 200 LoanID дублируются.Удалить строки в XML, где определенный столбец содержит дубликаты

Поскольку вся строка не обязательно должна быть дубликатом, но только 1 «столбец», я не могу использовать плагин TextFX. Например, BorrowerID может содержать дубликаты. Только LoanID не допускается содержать дубликаты.

линия 1:

<ns1:Loan>ns1:Identifiers:LoanID>876298<LoanID> <ns1:IsRegulatedLoan>ND,6</ns1:IsRegulatedLoan><ns1:Originator>TestBank</ns1:Originator><ns1:ServicerID>Testbank NV</ns1:ServicerID><ns1:BorrowerID>26547</ns1:BorrowerID><ns1:PropertyID>364239</ns1:PropertyID> 

line2:

ns1:Loan ns1:Identifiers>:LoanID>819305:LoanID> 
ns1:IsRegulatedLoan>ND,6/:IsRegulatedLoanns1:Originator>TestBank/ns1:Originator>ns1:ServicerID>Testbank NV</ns1:ServicerID>ns1:BorrowerID>195797:BorrowerID> 
+1

Недопустимый код XML, например. в строке 2 отсутствует <Также обратите внимание, что xml-элементы cam будут распределены по нескольким строкам (на самом деле фират, который я сделал бы на просмотр, будет переформатировать, чтобы он был читабельным) – Mark

ответ

1

Манипулирование XML на уровне "линий", это не очень хорошая идея, потому что линия окончаний не имеют особого значения и может легко измениться.

Для такого рода операций большинство людей будет использовать XSLT. Для XSLT есть кривая обучения, но если вы собираетесь использовать XML, это жизненно важная часть вашего инструментария, поэтому стоит успеть освоить его. Типичный код (в XSLT 2.0) будет выглядеть следующим образом:

<xsl:for-each-group select="ns1:Loan" group-by="LoanId"> 
    <xsl:copy-of select="current-group()[1]"/> 
</xsl:for-each-group> 

который, учитывая множество дублей, сбросит все, кроме первого.

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