идентификатор меню регулярное выражение вызов - PullRequest
1 голос
/ 20 марта 2012

В настоящее время я работаю со следующим блоком псевдокода, чтобы исправить проблему с регулярным выражением, с которой сталкиваюсь. В настоящее время я использую регулярное выражение для поиска / удаления различных пунктов меню на основе идентификатора, однако он работает только для дочерних элементов, а не для родительских записей. поэтому в этом примере я пытаюсь удалить id53, и если вы запустите псевдокод, вы увидите, что он нарушает структуру дерева b / c, но не удаляет весь блок <li></li>.

У кого-нибудь есть идеи по настройке тестового шаблона регулярных выражений, с которым мы работаем? Я очень ценю вашу помощь и надеюсь, что вы отлично проведете неделю.

<cfsavecontent variable="pseudo">
<ul id="nav-main-links">
    <li class="standby" id="id61"><a href="/?event=User.Home.dspHome" target="_self" title="Home"> Home<font class="menuItemType">(CB)</font></a>
    <li class="standby" id="id53"><a href="/contactus.cfm" target="_self" title="Contacts"> Contacts<font class="menuItemType">(L)</font></a>
    <ul class="sub-nav-main-links nestingLevel1">
        <li class="standby" id="id54"><a href="http://test/index.cfm" target="_self" title="Ven"> Ven<font class="menuItemType">(X)</font></a></li>
        <li class="standby" id="id55"><a href="http://test/spEvents.cfm" target="_self" title="SponsorShip"> SponsorShip<font class="menuItemType">(L)</font></a></li>
    </ul>
    </li>
</ul>
</cfsavecontent>
<cfscript>
    myDisplay=structnew();
    myDisplay.pseudo=pseudo;
    myDisplay.IdsToRemove="53";
    myDisplay.RegExTestPattern='<li[^>]*?id="id(' & myDisplay.IdsToRemove & ')".*?li>';
    myDisplay.Menu=reReplaceNoCase(myDisplay.pseudo,myDisplay.RegExTestPattern,"","All");   
</cfscript>
<cfdump var="#myDisplay#">

1 Ответ

2 голосов
/ 21 марта 2012

Для написания решения регулярного выражения потребуется рекурсивное регулярное выражение, и я не знаю, поддерживает ли CFML это. Как я уже говорил, манипулирование XML DOM - это путь. Это выглядело бы примерно так (не проверено, поскольку у меня нет доступа к серверу ColdFusion.

<cfsavecontent variable="pseudo">
<ul id="nav-main-links">
  <li class="standby" id="id61"><a href="/?event=User.Home.dspHome" target="_self" title="Home"> Home<font class="menuItemType">(CB)</font></a>
  <li class="standby" id="id53"><a href="/contactus.cfm" target="_self" title="Contacts"> Contacts<font class="menuItemType">(L)</font></a>
  <ul class="sub-nav-main-links nestingLevel1">
    <li class="standby" id="id54"><a href="http://test/index.cfm" target="_self" title="Ven"> Ven<font class="menuItemType">(X)</font></a></li>
    <li class="standby" id="id55"><a href="http://test/spEvents.cfm" target="_self" title="SponsorShip"> SponsorShip<font class="menuItemType">(L)</font></a></li>
  </ul>
  </li>
</ul>
</cfsavecontent>

<cfscript>

  myDisplay=structnew();
  myDisplay.IdsToRemove = "53";
  idVal = 'id' & myDisplay.IdsToRemove;

  xmlTree = xmlParse(pseudo);
  liList = xmlSearch(xmlTree, '//li[@id="' & idVal & '"]');
  arrayDeleteAt(liList, 0);

  myDisplay.pseudo = toString(xmlTree);

</cfscript>

<cfdump var="#myDisplay#">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...